gpt4 book ai didi

javascript - 为什么在创建对象的新实例时函数的属性没有被覆盖为默认值?

转载 作者:行者123 更新时间:2023-11-29 15:18:19 24 4
gpt4 key购买 nike

请解释为什么函数 foo 的新实例 obj2 在 items 数组中仍然有元素?为什么当我调用 new foo() 时它没有被覆盖?

var foo = function() {}

foo.prototype = {
items : [],
addItem : function()
{
this.items.push("item");
}
}

var obj = new foo();
obj.addItem();

console.log(obj.items.length); //1 as expected

var obj2 = new foo();

console.log(obj2.items.length); // 1, why not 0?????

最佳答案

您已将它添加到原型(prototype)中,这意味着所有实例都将共享它。您需要为每个 Foo 实例创建一个新的 items 数组。为此,您需要将其移出 prototype 并移至您的函数体中。您将把它附加到 this

function Foo() {
this.items = [];
}

Foo.prototype.addItem = function(item) {
this.items.push(item);
}

关于javascript - 为什么在创建对象的新实例时函数的属性没有被覆盖为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658363/

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