2013-10-01 63 views
0

我有Director()函數。我用Director()構造函數創建了2個實例AlfredH和JohnD。我沒有寫出原型對象。構造函數和原型的值在寫完原型對象後發生了變化。爲什麼?

function Director(){ 
    this.genre = "Thriller"; 
} 

var AlfredH = new Director(); 
var JohnD = new Director(); 

如果我檢查JohnD.constructor的值;和JohnD.constructor.prototype;我分別得到導演()和對象()

但是,如果我添加像下面特性原型處長(對象):

function Director(){ 
    this.genre = "Thriller"; 
} 
Director.prototype = { 
    noir: true 
}; 
var AlfredH = new Director(); 
var JohnD = new Director(); 

,如果我檢查JohnD.constructor的值;和JohnD.constructor.prototype;我分別得到Object()和Object()。誰能解釋這種行爲?並且可以將其擴展爲JohnD.constructor.prototype.constructor的值;

回答

1
var a = { 
    value:22; 
} 

然後

var a = { 
    somethingelse:0 
} 

你猜a.value是什麼?

您正在用另一個對象覆蓋原型。

然後添加到該

console.log({}.constructor)===Object;//=true 

也許嘗試添加這樣的:

Director.prototype.noir = true; 

需要注意的是在原型任何實例間共享,這是一件好事,因爲這樣可以節省內存並用較少的cpu快速實例化對象。

當分配一個新的值的值被分配給實例,但通過功能操縱值時,它會影響所有的實例

Director.prototype.someArray=[]; 
var d1=new Director(); 
var d2=new Director(); 
d1.someArray.push(22); 
console.log(d2.someArray);//=[22] 

更多信息原型這裏:https://stackoverflow.com/a/16063711/1641941

相關問題