gpt4 book ai didi

javascript - 在不丢失内存的情况下为每个实例创建和共享方法

转载 作者:行者123 更新时间:2023-11-30 00:01:56 24 4
gpt4 key购买 nike

此代码只是示例。我试着理解 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com