javascript原型变量创建引用

javascript原型变量创建引用,javascript,prototype,Javascript,Prototype,我不熟悉面向对象的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.so

我不熟悉面向对象的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必须是一个对象。

因为您正在创建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

当您将
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

提供自己的独立值,该值根本没有回答问题。谢谢Dan,非常有用