亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

原型和原型鏈 及 instanceof函數(shù)

Jioby / 1462人閱讀

摘要:有一個(gè)有趣的現(xiàn)象為何為等等這些都被稱作是構(gòu)造函數(shù)想一下我們可以來(lái)創(chuàng)建一個(gè)對(duì)象,所以本身就是一個(gè)構(gòu)造函數(shù),他們都是函數(shù)。而所有的函數(shù)都是構(gòu)造函數(shù)的實(shí)例。

一、原型(prototype)

定義:一個(gè)簡(jiǎn)單的對(duì)象,用于實(shí)現(xiàn)對(duì)象的屬性繼承??梢院?jiǎn)單理解成對(duì)象的爹。在Firefox和Chorme中,每個(gè)JS對(duì)象中都包含一個(gè)__proto__(非標(biāo)準(zhǔn))的屬性指向該對(duì)象的原型,可obj.__proto__進(jìn)行訪問(wèn)

實(shí)例是通過(guò)構(gòu)造函數(shù)(new)創(chuàng)建出來(lái)的對(duì)象,實(shí)例通過(guò)__proto__指向原型,通過(guò)constructor指向構(gòu)造函數(shù)

以上描述可表示為:var a = new Object(); a.__proto__ === a.contructor.prototype

二、原型鏈(prototype chain)

原型鏈?zhǔn)怯稍蛯?duì)象組成,每個(gè)對(duì)象都有一個(gè)__proto__屬性,指向了創(chuàng)建該對(duì)象的構(gòu)造函數(shù)的原型,__proto__將對(duì)象鏈接起來(lái)組成了原型鏈。是一個(gè)用來(lái)實(shí)現(xiàn)繼承和共享屬性的有限的對(duì)象鏈。

在 javaScript 中,每個(gè)對(duì)象都有一個(gè)指向它的原型(prototype)對(duì)象的內(nèi)部鏈接。這個(gè)原型對(duì)象又有自己的原型,直到某個(gè)對(duì)象的原型為 null 為止(也就是不再有原型指向),組成這條鏈的最后一環(huán)。這種一級(jí)一級(jí)的鏈結(jié)構(gòu)就稱為原型鏈(prototype chain)

function A(){};
var a = new A();
// a  ===> a.__proto__(A.prototype) ===> A.prototype.__proto__(Object.prototype) ===> Object.prototype.__proto__ ===> null
三、instanceof函數(shù)
定義:instanceof運(yùn)算時(shí)會(huì)遞歸查找L的原型鏈,即L.__proto__.__proto__.__proto__.__proto__...直到找到了或者找到頂層為止。一句話理解instanceof的運(yùn)算規(guī)則為:instanceof檢測(cè)左側(cè)的__proto__原型鏈上,是否存在右側(cè)的prototype原型。
有一個(gè)有趣的現(xiàn)象:
Function instanceof Object; // true
Object instanceof Function; // true
為何Object instanceof Function為true?

Object, Function, Array等等這些都被稱作是構(gòu)造“函數(shù)”(想一下我們可以var a = new Object()來(lái)創(chuàng)建一個(gè)對(duì)象,所以Object本身就是一個(gè)構(gòu)造函數(shù)),他們都是函數(shù)。而所有的函數(shù)都是構(gòu)造函數(shù)Function的實(shí)例。

從原型鏈機(jī)制的的角度來(lái)說(shuō),即Function.prototype在Object的原型鏈上。Function這個(gè)內(nèi)置函數(shù)的Function.prototype是一個(gè)函數(shù)a,因?yàn)楹瘮?shù)同時(shí)也是對(duì)象,因此這個(gè)函數(shù)a也定義了apply、call、bind等屬性(或者說(shuō)方法)。而Object的委托目標(biāo)Object.__proto__正是這個(gè)函數(shù)a,代碼表示為:Function.prototype === Object.__proto__ // true

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102267.html

相關(guān)文章

  • 繼承的實(shí)現(xiàn)方式原型概述 | JavaScript 隨筆

    摘要:每一個(gè)對(duì)象直接量都是的子類,即構(gòu)造函數(shù)中的構(gòu)造函數(shù)與普通函數(shù)并沒(méi)有什么兩樣,只不過(guò)在調(diào)用時(shí),前面加上了關(guān)鍵字,就當(dāng)成是構(gòu)造函數(shù)了。由于沒(méi)有傳入變量,在調(diào)用的構(gòu)造函數(shù)時(shí),會(huì)出錯(cuò)這個(gè)問(wèn)題可以通過(guò)一個(gè)空對(duì)象來(lái)解決改自。 showImg(https://segmentfault.com/img/bVmNZj); 對(duì)于 OO 語(yǔ)言,有一句話叫Everything is object,雖然 Ja...

    chenjiang3 評(píng)論0 收藏0
  • 復(fù)習(xí)Javascript專題(三):面向?qū)ο螅▽?duì)象的創(chuàng)建與繼承,原型原型

    摘要:在創(chuàng)建子類實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。構(gòu)造函數(shù)繼承子類傳進(jìn)的值是基本思想是在子類構(gòu)造函數(shù)的內(nèi)部調(diào)用超類或父類型構(gòu)造函數(shù)。繼承保證構(gòu)造函數(shù)指針指向如果想同時(shí)繼承多個(gè),還可使用添加屬性的方式類繼承, OOP:Object Oriented Programming 面向?qū)ο缶幊獭?題外話:面向?qū)ο蟮姆秶鷮?shí)在太大,先把這些大的東西理解理解。 1.什么是對(duì)象? 根據(jù)高程和權(quán)威指南上...

    testHs 評(píng)論0 收藏0
  • 《javascript高級(jí)程序設(shè)計(jì)》筆記:原型圖解

    摘要:不理解沒(méi)關(guān)系,下面會(huì)結(jié)合圖例分析上一篇高級(jí)程序設(shè)計(jì)筆記創(chuàng)建對(duì)象下一篇高級(jí)程序設(shè)計(jì)筆記繼承參考之原型鏈的解讀三張圖搞懂的原型對(duì)象與原型鏈繼承與原型鏈 文章直接從原型圖解開始的,如果對(duì)一些概念不太清除,可以結(jié)合后面幾節(jié)查看 1. 圖解原型鏈 1.1 鐵三角關(guān)系(重點(diǎn)) function Person() {}; var p = new Person(); showImg(https://s...

    vspiders 評(píng)論0 收藏0
  • js數(shù)據(jù)類型類型檢測(cè)

    摘要:使用的構(gòu)造函數(shù)是,它只為新對(duì)象定義了默認(rèn)的屬性和方法。如果網(wǎng)頁(yè)中包含多個(gè)框架,那實(shí)際上就存在多個(gè)不同的全局執(zhí)行環(huán)境,從而存在多個(gè)不同版本的構(gòu)造函數(shù)。每個(gè)類在內(nèi)部都有一個(gè)屬性,這個(gè)屬性中就指定了上述字符串中的構(gòu)造函數(shù)。 js中常見的用于類型判斷的操作符或?qū)傩杂校簍ypeof、instanceof、prototype。下面我們就來(lái)看看他們是如何判斷數(shù)據(jù)類型的。 一.js數(shù)據(jù)類型 ECMAs...

    Kyxy 評(píng)論0 收藏0
  • 詳解 JS 中 new 調(diào)用函數(shù)原理

    摘要:中經(jīng)常使用構(gòu)造函數(shù)創(chuàng)建對(duì)象通過(guò)操作符調(diào)用一個(gè)函數(shù),那在使用調(diào)用一個(gè)函數(shù)的時(shí)候到底發(fā)生了什么先看幾個(gè)例子,再解釋背后發(fā)生了什么。其中就是指構(gòu)造函數(shù)本身。 JavaScript 中經(jīng)常使用構(gòu)造函數(shù)創(chuàng)建對(duì)象(通過(guò) new 操作符調(diào)用一個(gè)函數(shù)),那在使用 new 調(diào)用一個(gè)函數(shù)的時(shí)候到底發(fā)生了什么?先看幾個(gè)例子,再解釋背后發(fā)生了什么。 1)看三個(gè)例子 1.1 無(wú) return 語(yǔ)句 構(gòu)造函數(shù)最后...

    付永剛 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<