2013-09-21 91 views
1

我是面向对象的JavaScript的新手,因此这个问题可能很幼稚。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必须是一个对象。

回答

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自己的,独立的价值的所有对象。

+0

谢谢Dan,非常有帮助 – Dharmesh

-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 
+1

那根本没有回答这个问题 – Dancrumb