【发布时间】:2014-01-23 07:43:59
【问题描述】:
我正在处理一个点亮的数据对象,然后尝试创建一个新对象,仅针对该实例更改数据属性中的属性,这是来自 jsbin 的一些测试代码
data = {
innerData : 1
}
-------------
'This works :-)'
construct = function(d){
this.data = Object.create(d);
};
construct.prototype.c = function(n){
this.data.innerData = n;
};
construct.prototype.d = function(){
console.log(this.data.innerData)
};
--------------
'This does not :-{'
construct = {
data : Object.create(data),
changeData : function(n){
this.data.innerData = n;
},
showData:function(){
console.log(this.data.innerData)
}
}
--------------
newInst = Object.create(construct);
newInst.changeData(5);
newInst.showData();
newInst2 = Object.create(construct);
newInst2showData();
当我使用构造函数/原型函数运行它时,它可以工作并且控制台输出 5,2
当我使用对象文字运行它时,控制台输出 5,5 我猜当我创建第一个实例时,它会更改实际数据对象,而不是构造对象实例的数据属性。
如果有人能深入解释为什么会发生这种情况,那将会很有帮助,因为我已经很久没有使用 OOJS了
更新:
所以我尝试了合并我从答案中发现有用的内容,我想出了这个....
data = {
innerData : 1
}
function construct(d){
return {
data : Object.create(d),
changeData : function(n){
this.data.innerData = n;
},
showData : function(){
console.log(this.data.innerData)
}
}
}
build = function(){
return(new construct(data));
}
newInst = build();
newInst.changeData(5);
newInst.showData();
newInst2 = build();
newInst2.showData();
【问题讨论】:
-
数组通过引用传递而不是复制。
-
@zerkms 什么数组? :)
-
@Jack:哎呀,对象。谁重要
标签: javascript oop constructor object-literal