1

我是面向对象 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?我想象我正在使用“新”创建两个单独的实例。

有人可以建议我更好的方法吗?仅供参考,SRT 必须是一个对象。

4

2 回答 2

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

于 2013-09-21T12:53:55.473 回答
-1

由于您正在创建 RIT.test() 类的 2 个实例,因此它们不能相同。

考虑这个例子:

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
于 2013-09-21T12:49:28.193 回答