摘要:了解中原型以及原型鏈只需要記住以下點即可對象都有屬性,指向構造函數的構造函數函數都有屬性,指向構造函數的原型對象的內置構造函數可知所有的構造函數都繼承于甚至包括根構造器及自身。
了解JavaScript中原型以及原型鏈只需要記住以下2點即可
對象都有__proto__屬性,指向構造函數的prototype
構造函數函數都有prototype屬性,指向構造函數的原型
1、對象的__proto__內置構造函數
Number.__proto__ === Function.prototype // true Boolean.__proto__ === Function.prototype // true String.__proto__ === Function.prototype // true Object.__proto__ === Function.prototype // true Function.__proto__ === Function.prototype // true Array.__proto__ === Function.prototype // true RegExp.__proto__ === Function.prototype // true Error.__proto__ === Function.prototype // true Date.__proto__ === Function.prototype // true
可知所有的構造函數都繼承于Function.prototype , 甚至包括根構造器Object及Function自身。所有構造器都繼承了Function.prototype的屬性及方法,如length、call、apply、bind等。
既然所有的構造器都來自于Function.prototype, 那么Function.prototype 是什么呢?
Object.prototype.toString.call(Function.prototype) "[object Function]" Function.prototype(); //undefined
Function.prototype 是函數,是不是很意外!!!
既然 Function.prototype 是函數,那么它就是 Function 的實例,然而并不是這樣的!!!
Function.prototype.__proto__ === Function.prototype // false Function.prototype.__proto__ === Object.prototype // true
如何理解 Function.prototype 不是 Function 實例的怪異行為呢?解決怪異行為的根本方法是讓它顯得不那么怪異,看下面代碼。
Object.prototype.toString.call(Number.prototype) "[object Number]" Number.prototype.__proto__ === Number.prototype // false Number.prototype.__proto__ === Object.prototype // true Object.prototype.toString.call(String.prototype) "[object String]" String.prototype.__proto__ === String.prototype // false String.prototype.__proto__ === Object.prototype // true Object.prototype.toString.call(Array.prototype) "[object Array]" Number.prototype.__proto__ === Array.prototype // false Number.prototype.__proto__ === Object.prototype // true
簡單理解:內置構造函數的數據類型是對應的構造函數,但不是其對應構造函數的實例,而是Object的實例。
2、函數的prototype構造函數函數都有prototype屬性,指向構造函數函數的原型,原型有constructor屬性,指向構造函數函數
構造函數
Number.prototype.constructor === Number // true Function.prototype.constructor === Function //true Object.prototype.constructor === Object true
普通函數
function wang(){}; wang.prototype.constructor === wang //true關系圖
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105793.html
摘要:構造函數和實例都通過屬性指向了原形。代碼示例是構造函數的實例的屬性與的屬性保存的值相等,即他們指向同一個對象原形。 講清楚之javascript原型 標簽: javascript javascript 中原形是一個比較難于理解的概念。javascript 權威指南在原形這一章也花了大量的篇幅進行介紹,也許你已經讀過javascript 權威指南,或者已經是讀第N篇了,然而這篇文章的目...
摘要:我們用一張圖表示構造函數和實例原型之間的關系好了構造函數和實例原型之間的關系我們已經梳理清楚了,那我們怎么表示實例與實例原型,也就是或者和之間的關系呢。 開篇: 在Brendan Eich大神為JavaScript設計面向對象系統的時候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向對象系統,并不是因為時間匆忙,它設計起來相對簡單,而是因為從一開始B...
摘要:我們用一張圖表示構造函數和實例原型之間的關系好了構造函數和實例原型之間的關系我們已經梳理清楚了,那我們怎么表示實例與實例原型,也就是或者和之間的關系呢。 開篇: 在Brendan Eich大神為JavaScript設計面向對象系統的時候,借鑒了Self 和Smalltalk這兩門基于原型的語言,之所以選擇基于原型的面向對象系統,并不是因為時間匆忙,它設計起來相對簡單,而是因為從一開始B...
摘要:每個原型對象都有一個屬性指向關聯的構造函數為了驗證這一說話,舉個例子。 本文共 1475 字,讀完只需 6 分鐘 一、概述 在 JavaScript 中,是一種面向對象的程序設計語言,但是 JS 本身是沒有 類 的概念,JS 是靠原型和原型鏈實現對象屬性的繼承。 在理解原型前,需要先知道對象的構造函數是什么,構造函數都有什么特點? 1. 構造函數 // 構造函數 Person() ...
閱讀 3469·2023-04-25 21:43
閱讀 3098·2019-08-29 17:04
閱讀 797·2019-08-29 16:32
閱讀 1533·2019-08-29 15:16
閱讀 2144·2019-08-29 14:09
閱讀 2732·2019-08-29 13:07
閱讀 1623·2019-08-26 13:32
閱讀 1320·2019-08-26 12:00