Solved

JavaScript Implement Inheritance

Posted on 2015-02-14
3
167 Views
Last Modified: 2015-02-15
I am trying to implement inheritance but it does not seem to work.  I am following the example in "Programming in HTML5 with JavaScript  and CSS3".  I created a vehicle constructor and then created a car that is supposed to inherit from vehicle but I'm getting an error.  See below in jsfidle.

http://jsfiddle.net/isogunro/nj9x5zbn/1/

Any ideas?
0
Comment
Question by:Isaac
3 Comments
 
LVL 5

Author Comment

by:Isaac
ID: 40610247
When I run jshint, it says "Car" is already defined but in the book, they have it executing with no errors.
0
 
LVL 30

Assisted Solution

by:Alexandre Simões
Alexandre Simões earned 150 total points
ID: 40610751
I don't understand what you're trying to achieve.
You're creating a Vehicle base "class" that has 3 properties and 2 methods, and this works well.

After you create the Car but I don't understand what you want to do with it.
Also, inside Car you're setting its prototype by calling Car.prototype, but car is not defined yet... you're still inside the functions, you haven't returned anything.

If all you want is to add the wheelQuantity property you can do:
http://jsfiddle.net/AlexCode/r49am6rf/1/

Here's the code:
var Vehicle = (function () {
    // create the vehicle
    function Vehicle() {
        this.year = null;
        this.make = null;
        this.model = null;
    }
    
    // isolate vehicle methods in its prototype
    Vehicle.prototype = {
        getInfo: function () {
            return this.year + ' ' + this.make + ' ' + this.model;
        },
        startEngine: function () {
            return 'Vroom';
        }
    }
    
    return Vehicle;
})();


// create the car that has Vehicle as its prototype
//    and adds wheelQuantity as new property
var Car = function (year, make, model) {
    this.year = year;
    this.make = make;
    this.model = model;
    this.wheelQuantity = 4;
};
Car.prototype = new Vehicle();


// now to simulate an implementation, 
//    lets create a Fiat Punto car instance
var fiatPunto = new Car(2012, 'Fiat', 'Punto');

// Test the result
console.log(fiatPunto.make);
console.log(fiatPunto.wheelQuantity);
console.log(fiatPunto.getInfo());

Open in new window

0
 
LVL 42

Accepted Solution

by:
Rob Jurd, EE MVE earned 350 total points
ID: 40610763
I would do it slightly differently, utilising the Object.create() function:

http://jsbin.com/zenexe/2/edit?js,console

function Vehicle(year, make, model) {
  this.year = year;
  this.make = make;
  this.model = model;
}
Vehicle.prototype.getInfo = function() {
  return this.year + ' '+ this.make + ' '+this.model;   
};
Vehicle.prototype.startEngine = function() {
  return 'Vroom';   
};

var v2 = new Vehicle(2015,'Jeep', 'Wrangler');
console.log(v2.getInfo());
console.log(v2.startEngine());

//Implement INHERITANCE
function Car(year, make, model) {
  Vehicle.call(this, year, make, model);
  this.wheelQuantity = 4;
}

Car.prototype = Object.create(Vehicle.prototype);

Car.prototype.getInfo = function() {
  return 'Vehicle Type: Car ' + Vehicle.prototype.getInfo.call(this);
};

var v3 = new Car(2015,'Jeep', 'Wrangler');
console.log(v3.getInfo());
console.log(v3.startEngine());

Open in new window

0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Introduction A frequently asked question goes something like this:  "I am running a long process in the background and I want to alert my client when the process finishes.  How can I send a message to the browser?"  Unfortunately, the short answer …
Introduction Knockoutjs (Knockout) is a JavaScript framework (Model View ViewModel or MVVM framework).   The main ideology behind Knockout is to control from JavaScript how a page looks whilst creating an engaging user experience in the least …
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now