javascript - 引用和原始原型(prototype)值

标签 javascript javascript-objects

我不明白为什么数组在两个实例之间共享,而原始类型则不然。有人可以解释一下吗?

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/

相关文章:

使用链接打印日期和时间的 JavaScript 不起作用

javascript - 如何在其轴的最末端创建一个带有元素的圆?

javascript - 从函数内部的对象传递值

javascript - Xhr : API Cryptocurrency price alert script returns wrong and duplicate values

java - JsonpRequestBuilder访问google网页超时异常

单个域的 Javascript 文件

Javascript/Jquery - 不要重复自己

javascript - 将数组值转换为对象键

javascript - 为什么重新分配后不再反射(reflect)对象的更改?

javascript - 从外部访问函数内的函数定义