的回答你的問題在微詳細說明,以便有看看這篇文章,。我用我所有的答案那篇文章
在此之後,最好的文章Prototype它的一個價值是什麼Person.prototype的?
function Person(){}
每當一個函數的定義,它有一個名爲*原型這是不可枚舉的屬性。
這個原型屬性是一個對象具有非叫構造枚舉屬性,它是寫,配置。
此構造僅僅是函數本身是人在這種情況下 所以,如果你檢查Person.prototype.constructor == Person
或Person.constructor == Person
參考。它會返回true。 (後面的一個與第一個表達相同,由財產代表團)這回答你的第二個問題。
Person.constructor和Person.prototype.constructor和有什麼區別?
Javascript屬性委託,當你嘗試訪問一個不存在於對象中的屬性時,它將嘗試檢查其原型鏈接。
當您嘗試訪問Person.prototype對象上名爲x
的屬性時。
它將首先檢查Person.prototype,因爲沒有名爲x的屬性。它會檢查父母。這Object.prototype中(其中所有的對象原型。這將是你的祖先鏈最後的祖先)
第三個問題是關於建立子類或對象繼承Person類
通過默認的學生函數有原型對象。執行此語句時,new Person()
將創建一個對象,並將創建的對象的引用傳遞給Person.call(this)
,並將對象原型鏈接到 Person.prototype。 Student.prototype = new Person() 此方法用於模仿Subclass繼承。這樣從* new學生()創建的新對象也可以訪問人類方法和變量通過原型鏈接。
Student.prototype.constructor = Student
的需要這種說法是當U創建一個新的Student對象檢查繼承,使得新對象的instanceof學生班級
var bob = new Student()
所以當u要檢查即bob instanceof學生。在後臺,這將做bob.constructor == Student
。由於bob沒有構造函數屬性,它將委派並簽入Student。
如果你的頭腦仍然不清楚這個答案。請參考上面的鏈接。關於原型