此代码只是示例。我试着理解 Object.create。
function Animal {}
var cat = new Animal();
我想创建 100 只动物并向构造函数添加一些方法,例如 saySomething()。所以我将它添加到原型(prototype)中,并且我知道我的方法只会创建一次并且每个实例都可以访问它:
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 对象? 我很困惑 :/ 请帮忙。
最佳答案
从外观上看,该方法仅在原型(prototype)上创建。
dog.__proto__.saySomething
- 定义为在原型(prototype)上定义
仔细检查 dog.hasOwnProperty('saySomething')
返回 false,这表明该属性不可枚举或在原型(prototype)上定义。
如果你想为你的猫或狗添加方法,并确保只创建一个属性副本,你可以将它们添加到实例中,然后在实例上调用 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
关于javascript - 在不丢失内存的情况下为每个实例创建和共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40125788/