js的原型鏈和constructor

 

 

轉載:http://www.108js.com/article/article1/10201.html?id=1092javascript

請先瞻仰上邊的這篇文章。html

對象的原型鏈:java

box.__proto__.__proto__ == Object.prototype函數

//truethis

上邊對象的__proto__的屬性討論完了,咱們來看函數。prototype

person3d

普通函數的__proto__屬性:htm

person.__proto__ == Function.prototype //true對象

person.__proto //function(){}blog

box.__proto__ == person.prototype //true 這個是確定的。

box.__proto__這個也是一個對象,這個對象的__proto__屬性是什麼呢

box.__proto__.__proto__ == Object.prototype//true 

下邊咱們來討論Function.prototype 和Object.prototype的理解

Object.prototype 

Function.prototype //function(){}

Function.prototype === Object.__proto__ //true

Function.prototype === Object.prototype  //false
下邊的一段話,咱們能夠看到:

  1. javascript中,「函數」(方法)也是對象。

  2. 一切對象都有一個根源。它是Object.prototype。

  3. 根源之上再沒有其餘根源。Object.getPrototypeOf(Object.prototype)是null。js中除字面量之外的一切引用對象都來自這個「根源」對象。

  4. 表達式Object.getPrototypeOf(Function) === Function.prototype的結果是真。這是Function特有的。實際上Function的prototype是一個內置函數,一切函數都派生自這個內置函數,這個內置函數是一個函數工廠。這個內置函數對象的prototype指向「根源」對象。

  5. 表達式Object.prototype === Object.getPrototypeOf(Function.prototype)的結果是真。說明了Object跟Function兩者之間的聯繫,是經過「根源」對象聯繫起來的。

    Function和Object,既是函數,由於均可以Function()或者Object()這樣的方式執行,又是對象,由於能夠Function.a = 'a',Object.a = 'a'這樣賦值。

     

    說它們是函數,是由於他們都是經過上面第4條中說的」內置函數工廠「,派生出來的,於是具有函數的特性。

     

    說他們是對象。是由於他們都是經過上面第1條中的」根源「對象,派生出來的,所以具有對象的特徵。

     

    繼續說一下,Function.prototype指向」內置函數「。而Object.prototype指向」根源對象「。

    於是new Function會產生一個匿名函數,而new Object產生一個plain object。

     

    他們之間的關係簡單描述就像下面這樣。

 ===================================================================== 

constructor

何時function會變爲構造器呢?

當方法的返回值爲this的時候,或者說默認的返回值就是this.

當方法的返回值是匿名函數的時候,function就再也不是匿名 函數

另外一種狀況返回this,或者不返回的時候:

 

 

相關文章
相關標籤/搜索