使用Object.Create将函数添加到JavaScript对象

使用Object.Create将函数添加到JavaScript对象,javascript,oop,object-create,Javascript,Oop,Object Create,我正在尝试使用JavaScript中的Object.Create。我目前拥有以下代码: var vehicle = { getModel: function () { console.log( "The model of this vehicle is.." + this.model ); } }; var car = Object.create(vehicle, { "id": { value: 9, }

我正在尝试使用JavaScript中的Object.Create。我目前拥有以下代码:

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 );
   }
});
我试图为getMake向van添加函数,但出现错误:

TypeError:调用时,对象#的属性“getMake”不是函数:

van.getMake()


这可能吗?怎么做?

默认情况下,以这种方式创建的属性不可枚举。这可能导致您的问题

试试这个(未经测试):


编辑它看起来是有效的,因为我们传递的是一个对象,而不仅仅是值。不需要可枚举项。

您需要传递定义属性的对象,而不仅仅是值:

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


请注意,在Javascript中执行OOP的常用方法不是使用Object.create,而是使用

我从未使用过
对象。创建
…我不仅从未使用过它,而且我甚至不知道它的存在…不需要属性是可枚举的。我支持@dystroy,我甚至认为在迭代对象(
for(var p in obj)
)时,最好将属性定义为
可枚举:false
,您通常不想处理方法,但默认行为是列出所有可枚举属性,并且默认情况下方法是可枚举的。因此,使用可枚举属性很好:因为它更接近预期的默认行为。在我看来,它是丑陋的、无用的和无用的。但是,作为大多数js程序员,我从不使用Object.create,因此我可能会错过它的一些优点。
 "getMake": {value:function () {
     console.log( "The make of this vehicle is.." + this.make );
 }}