使用Object.Create将函数添加到JavaScript对象
我正在尝试使用JavaScript中的Object.Create。我目前拥有以下代码:使用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, }
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 );
}}