davy
davy

Reputation: 4552

Add Function to JavaScript Object using Object.Create

I'm trying to use Object.Create in JavaScript. I currently have the following code:

var vehicle = {
        getModel: function () {
        console.log( "The model of this vehicle is.." + this.model );
    }
};

var car = Object.create(vehicle, {
    "id": {
       value: 9,         
    },
    "model": {
       value: "Ford",  
    }
});

var van = Object.create(vehicle, {
  "id": {
     value: 10,    
   },
    "model": {
      value: "Big Van",
      enumerable: true
   },
    "make": {
      value: "Warrior",      
   },
    "getMake": function () {
       console.log( "The make of this vehicle is.." + this.make );
   }
});

I've tried to add a function to van for getMake but I get the error:

TypeError: Property 'getMake' of object # is not a function when I call:

van.getMake();

Is this possible? How do you do it?

Upvotes: 4

Views: 1598

Answers (2)

Ryan O'Neill
Ryan O'Neill

Reputation: 1790

Properties created that way are not enumerable by default. This may be causing your issue.

Try this(untested):

"getMake": { value: function () {
       console.log( "The make of this vehicle is.." + this.make )
   }, enumerable: true };

Edit It looks like this is working because we are passing an object and not just the value. The enumerable is unnecessary.

Upvotes: 6

Denys Séguret
Denys Séguret

Reputation: 382150

You need to pass an object defining the property, not just the value :

 "getMake": {value:function () {
     console.log( "The make of this vehicle is.." + this.make );
 }}

Reference

Note that the usual way to do OOP in Javascript isn't in using Object.create but in using prototype.

Upvotes: 2

Related Questions