我是面向对象的javascript的新手,因此这个问题可能非常幼稚。
我有:
RIT.test = (function() {
test.prototype.SRT = {
someInSRT: 5
};
function test() {
}
return test;
})();
我正在做以下事情:
var v1 = new RIT.test();
var v2 = new RIT.test();
v1.SRT.someInSRT = 10;
v1.SRT.someInSRT = 5;
console.log(v1.SRT.someInSRT);
console.log(v2.SRT.someInSRT);
为什么v1.SRT.someInSRT和v2.SRT.someInSRT的值都是5?我想我正在使用'new'创建两个单独的实例。
有人可以建议我一个更好的方法吗?仅供参考,SRT必须是一个对象。
答案 0 :(得分:3)
当您向原型添加SRT
时,您需要添加对您已定义为
{
someInSRT: 5
}
基于此原型的对象的所有新实例都将共享该引用。因此,v1.SRT === v2.SRT
。因此,您对v1.SRT
所做的任何更改都将通过v2.SRT
;
在这种情况下,您需要的是:
RIT.test = (function() {
function test() {
this.SRT = {
someInSRT: 5
};
}
return test;
})();
通过这种方式,从RIT.test
派生的所有对象都将拥有自己的SRT
独立值。
答案 1 :(得分:-1)
由于您正在创建2个RIT.test()类实例,因此它们不能相同。
考虑这个例子:
var class1 = function(value){
this.number value;
};
class1.prototype.getNumber = function(){
return this.number;
}
var number = new class1(5);
var number2 = new class1();//not value pass to the constructor here...
console.log(number.getNumber());//print 5 because the constructor is reciving a value
console.log(number2.getNumber())//null, since you have not give any value
//since you did not pass any value to the second instance to the constructor