2012-05-19 50 views
4

有鑑於此:如何在這個共享原型中分離數組?

var p = function(){}; 
p.prototype = { id : null, arr : []} 
var a = new p(); 
var b = new p(); 
a.id = 1; 
a.arr.push(5); 
alert(b.arr[0]); 

警報讀取5意味着a.arr == b.arr,但是a.id和b.id是分開的(a.id = b.id!)。我怎樣才能讓它變成a.arr!= b.arr?

約束:

p必須能夠有new p()使用。或者,必須有一種方法來製作獨特的p。

+0

可能有用的是在創建它之後添加數組作爲原型。所以那麼這個id在創建對象時並不是永久的,但是如果我理解你正在嘗試做什麼,那麼數組的內容就是這樣。 – Andy

回答

3

如果你希望id和arr對每個p的實例都是唯一的,你需要在p構造函數中實例化它們。原型對象只能用於共享常量和函數。

var p = function(){ 
    this.id = null; 
    this.arr = []; 
}; 

var a = new p(); 
var b = new p(); 

a.id = 1; 
a.arr.push(5); 
alert(b.arr[0]);