摘要:了解中原型以及原型鏈只需要記住以下點(diǎn)即可對(duì)象都有屬性,指向構(gòu)造函數(shù)的構(gòu)造函數(shù)函數(shù)都有屬性,指向構(gòu)造函數(shù)的原型對(duì)象的內(nèi)置構(gòu)造函數(shù)可知所有的構(gòu)造函數(shù)都繼承于甚至包括根構(gòu)造器及自身。
了解JavaScript中原型以及原型鏈只需要記住以下2點(diǎn)即可
對(duì)象都有__proto__屬性,指向構(gòu)造函數(shù)的prototype
構(gòu)造函數(shù)函數(shù)都有prototype屬性,指向構(gòu)造函數(shù)的原型
1、對(duì)象的__proto__內(nèi)置構(gòu)造函數(shù)
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
可知所有的構(gòu)造函數(shù)都繼承于Function.prototype , 甚至包括根構(gòu)造器Object及Function自身。所有構(gòu)造器都繼承了Function.prototype的屬性及方法,如length、call、apply、bind等。
既然所有的構(gòu)造器都來自于Function.prototype, 那么Function.prototype 是什么呢?
Object.prototype.toString.call(Function.prototype) "[object Function]" Function.prototype(); //undefined
Function.prototype 是函數(shù),是不是很意外!!!
既然 Function.prototype 是函數(shù),那么它就是 Function 的實(shí)例,然而并不是這樣的!!!
Function.prototype.__proto__ === Function.prototype // false Function.prototype.__proto__ === Object.prototype // true
如何理解 Function.prototype 不是 Function 實(shí)例的怪異行為呢?解決怪異行為的根本方法是讓它顯得不那么怪異,看下面代碼。
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
簡(jiǎn)單理解:內(nèi)置構(gòu)造函數(shù)的數(shù)據(jù)類型是對(duì)應(yīng)的構(gòu)造函數(shù),但不是其對(duì)應(yīng)構(gòu)造函數(shù)的實(shí)例,而是Object的實(shí)例。
2、函數(shù)的prototype構(gòu)造函數(shù)函數(shù)都有prototype屬性,指向構(gòu)造函數(shù)函數(shù)的原型,原型有constructor屬性,指向構(gòu)造函數(shù)函數(shù)
構(gòu)造函數(shù)
Number.prototype.constructor === Number // true Function.prototype.constructor === Function //true Object.prototype.constructor === Object true
普通函數(shù)
function wang(){}; wang.prototype.constructor === wang //true關(guān)系圖
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105793.html
摘要:構(gòu)造函數(shù)和實(shí)例都通過屬性指向了原形。代碼示例是構(gòu)造函數(shù)的實(shí)例的屬性與的屬性保存的值相等,即他們指向同一個(gè)對(duì)象原形。 講清楚之javascript原型 標(biāo)簽: javascript javascript 中原形是一個(gè)比較難于理解的概念。javascript 權(quán)威指南在原形這一章也花了大量的篇幅進(jìn)行介紹,也許你已經(jīng)讀過javascript 權(quán)威指南,或者已經(jīng)是讀第N篇了,然而這篇文章的目...
摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語(yǔ)言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡(jiǎn)單,而是因?yàn)閺囊婚_始B...
摘要:我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系好了構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系我們已經(jīng)梳理清楚了,那我們?cè)趺幢硎緦?shí)例與實(shí)例原型,也就是或者和之間的關(guān)系呢。 開篇: 在Brendan Eich大神為JavaScript設(shè)計(jì)面向?qū)ο笙到y(tǒng)的時(shí)候,借鑒了Self 和Smalltalk這兩門基于原型的語(yǔ)言,之所以選擇基于原型的面向?qū)ο笙到y(tǒng),并不是因?yàn)闀r(shí)間匆忙,它設(shè)計(jì)起來相對(duì)簡(jiǎn)單,而是因?yàn)閺囊婚_始B...
摘要:每個(gè)原型對(duì)象都有一個(gè)屬性指向關(guān)聯(lián)的構(gòu)造函數(shù)為了驗(yàn)證這一說話,舉個(gè)例子。 本文共 1475 字,讀完只需 6 分鐘 一、概述 在 JavaScript 中,是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,但是 JS 本身是沒有 類 的概念,JS 是靠原型和原型鏈實(shí)現(xiàn)對(duì)象屬性的繼承。 在理解原型前,需要先知道對(duì)象的構(gòu)造函數(shù)是什么,構(gòu)造函數(shù)都有什么特點(diǎn)? 1. 構(gòu)造函數(shù) // 構(gòu)造函數(shù) Person() ...
閱讀 3556·2023-04-25 21:43
閱讀 3125·2019-08-29 17:04
閱讀 828·2019-08-29 16:32
閱讀 1567·2019-08-29 15:16
閱讀 2174·2019-08-29 14:09
閱讀 2772·2019-08-29 13:07
閱讀 1656·2019-08-26 13:32
閱讀 1346·2019-08-26 12:00