我不明白为什么数组在两个实例之间共享,而原始类型则不然。有人可以解释一下吗?
MyObject = function() {};
MyObject.prototype = {anArray : [],aString : ''};
var c1 = new MyObject();
c1.aString = 'a';
c1.anArray.push('a');
var c2 = new MyObject();
console.log(c2.aString);
console.log(c2.anArray);
最佳答案
字符串是不可变的,数组是可变的。您将替换字符串,但修改数组。
如果您覆盖数组而不是修改它,您将在数组和字符串之间获得相同的行为。
MyObject = function() {};
MyObject.prototype = {anArray : [],aString : ''};
var c1 = new MyObject();
c1.aString = 'a';
c1.anArray = []
c1.anArray.push('a');
var c2 = new MyObject();
console.log(c2.aString); // ''
console.log(c2.anArray); // []
因此,只有当您计划允许所有实例观察对象或数组的更改时,才将对象或数组放在原型(prototype)
上才有意义。否则,直接放在实例上即可。
MyObject = function() {
this.anArray = [];
};
MyObject.prototype = {aString : ''};
关于javascript - 引用和原始原型(prototype)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503422/