2010-11-21 115 views
4

我想抓住JavaScript的構造函數,如果他們真的只讀。這裏是一個簡單的測試場景:所以在這一點上,每一個新的函數接收一個包含構造函數作爲參考的原型對象。這很好。現在考慮這個:JavaScript的構造函數

var B = function() { 
    this.id = 0; 
} 

A.prototype.constructor = B; // what does this do with A? 

所以,現在,A的每個實例都應該得到B中的構造函數:

var C = new A(); 

console.log(C.constructor == B) // true 

所以最後,這是否會對每個實例任何真正的影響?它似乎並不如此:

console.log(C.id); // what will this yield? 

我的問題是:什麼是公開構造函數引用的目的是什麼?顯然你可以設置/覆蓋它,但除了改變引用外,它什麼也不做。或者我錯過了什麼?

回答

5

constructor屬性僅僅是爲了方便,它對你的程序的行爲沒有任何影響。默認情況下,當你定義一個函數時,func.prototype.constructor被設置爲func本身 - 你可以將它設置爲任何你想要的東西,它沒有什麼區別。構造的對象完全取決於傳遞給new的功能:如果你做new A(),它將總是調用函數A

+1

嗨,關於javascript繼承的每一篇文章,都告訴我們修復原型構造函數,在那個問題之後:A.prototype = Object.create(B.prototype);' 'A.prototype.constructor = B //在這裏修復' 我不明白'Object.create'的作用,但是下一行似乎沒用。我寫了一些代碼刪除它,並沒有任何效果。所以我的問題是,爲什麼每個人都說*修復構造函數? – 2015-11-12 20:30:23