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

dav*_*avy 4 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,         
    },
    "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 );
   }
});
Run Code Online (Sandbox Code Playgroud)

我试图为getMake添加一个函数,但是我得到了错误:

TypeError:当我调用时,对象#的属性'getMake'不是函数:

van.getMake();

这可能吗?你怎么做呢?

Rya*_*ill 6

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

试试这个(未经测试):

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

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

  • 不需要财产可枚举. (2认同)
  • 我在@dystroy,我甚至认为该属性最好定义为`enumerable:false`,当迭代一个对象(`for(var p in obj)`)时,你通常不想处理方法 (2认同)