此代码仅为示例。我试着理解Object.create。
function Animal {}
var cat = new Animal();
我想创建100个动物并向构造函数添加一些方法,例如saySomething()。所以我将它添加到原型中,我知道我的方法只会创建一次,并且每个实例都可以访问它:
Animal.prototype.saySomething = function(voice) {
console.log(voice)
}
但是当我创建这样的对象时:
var Animal = {
saySomething: function(voice) {
console.log(voice)
}
}
var cat = Object.create(Animal);
var dog = Object.create(Animal);
...
当我创建这样的对象时,是否为每个实例单独创建了saySomething方法? 如何以与之前相同的方式将此方法添加到Animal对象? 我糊涂了 :/ 请帮忙。
答案 0 :(得分:1)
从外观上看,该方法仅在原型上创建。
dog.__proto__.saySomething
- 已定义,因此它在原型
要仔细检查dog.hasOwnProperty('saySomething')
,则返回false,表示该属性不可枚举或在原型上定义。
如果你想向cat或dog添加方法,并确保只创建了一个属性副本,你可以将它们添加到实例中,然后在实例上调用Object.create。
var Animal = {
saySomething: function(voice) {
console.log(voice)
}
}
var cat = Object.create(Animal);
var dog = Object.create(Animal);
cat.saySomething = function(){
console.log('meow')
};
var catInstance = Object.create(cat);
catInstance.saySomething(); // 'meow'
typeof catInstance.__proto__.saySomething == "function" // true