gpt4 book ai didi

javascript - 原型(prototype)数组参数

转载 作者:行者123 更新时间:2023-12-02 14:56:44 24 4
gpt4 key购买 nike

我认为我不理解整个原型(prototype)流程,我有这个问题:

function SomeO() {};
SomeO.prototype.arr = [];
SomeO.prototype.str = "";

var s1 = new SomeO();
var s2 = new SomeO();

s1.str+="1"
console.log(s2) // "" OK

s1.arr.push(1)
console.log(s2) // [1] WHY???

为什么当我将一项添加到一个对象的数组中时,它具有相同的数组实例?

最佳答案

这是因为对象是由“SomeO”对象的所有实例(在本例中是“arr”属性)通过引用共享的,而字符串或数字之类的东西是通过值共享的,因此字符串的修改不会影响其他实例的值。

所以在这种情况下得到这个结果是正常的。

function SomeO() {};
SomeO.prototype.arr = [];
SomeO.prototype.str = "chimichangas";

var s1 = new SomeO();
var s2 = new SomeO();

s1.str+="1"
console.log(s1.str); // "chimichangas1" OK because is by value
console.log(s2.str); // "chimichangas" OK because is by value

s1.arr.push(1);
console.log(s2.arr); // [1] WHY??? because is by reference

如果你不想共享数组,你应该这样做。

function SomeO() {
this.arr = [];
};
SomeO.prototype.str = "";

var s1 = new SomeO();
var s2 = new SomeO();

s1.str+="1"
console.log(s1.str); // "1" OK
console.log(s2.str); // "" OK

s1.arr.push(1);
console.log(s1.arr); // [1] Ok
console.log(s2.arr); // [] Ok

关于javascript - 原型(prototype)数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752397/

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