2013-09-21 158 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