js中的prototype和constructor


本文正確性有待商榷,高手路過請不吝指教

1.js中只有對象,包括對象,函數,常量等。

對象不用解釋。函數也有屬性,常見之一就是prototype。常量也有屬性:

(3).__proto__;//Number {}

2.函數的prototype

函數是一種特殊的對象,它可以直接通過小括號來執行自身代碼。

函數還有一個特殊的屬性prototype,它也是一個對象。

prototype對象也有一個特殊的屬性constructor,初始的時候它是指向該函數的。

也就是當js解釋到function關鍵字的時候,會創建兩個對象,一個是function本身,一個是prototype對象。同時將該函數對象的prototype屬性指向prototype,而prototype對象的constructor屬性指向該函數對象。

3.對象的__proto__屬性

每個對象都有一個__proto__屬性(低版本的IE中可能沒有直接給出吧),該屬性十分特殊,因為在調用對象的方法或者訪問對象的屬性時,js會依次遍歷對象本身,該對象的__proto__,該對象的__proto__的__proto__……

也就是原型鏈繼承的關鍵

4.new關鍵字

new 關鍵字用於通過一個函數創建一個對象。

其實它主要完成三個工作

  1. 創建一個對象
  2. 將該對象的__proto__指向函數的prototype
  3. 調用該函數(此時注意函數的作用域是第一步新建的對象)

最后返回該對象即可。可以以下面的代碼代替

function New(f,args){var a= {};a.__proto__ = f.prototype;f.apply(a,args);return a;}

 5.js對象關系圖

其中:xFunction是自定義的函數,xPrototype是xFunction的原型,xObject=new xFunction()

Object 是JS內置的Object;_prototype_是Object的原型

Empty是所有函數對象的__proto__,是一個特殊的函數,沒有prototype,

 希望大家可以共同探討,給予指點

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM