亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript 手動(dòng)實(shí)現(xiàn)instanceof的方法

 更新時(shí)間:2021年10月29日 11:28:23   作者:火星飛鳥(niǎo)  
instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上,本文重點(diǎn)給大家介紹JavaScript手動(dòng)實(shí)現(xiàn)instanceof的問(wèn)題,感興趣的朋友跟隨小編一起看看吧

1. instanceof的用法

instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象原型鏈上。

function Person() {}
function Person2() {}

const usr = new Person();

console.log(usr instanceof Person); // true
console.log(usr instanceof Object); // true

console.log(usr instanceof Person2); // false

如上代碼,定義了兩個(gè)構(gòu)造函數(shù),PersonPerson2,又實(shí)用new操作創(chuàng)建了一個(gè)Person的實(shí)例對(duì)象usr

實(shí)用instanceof操作符,分別檢驗(yàn)構(gòu)造函數(shù)prototype屬性是否在usr這個(gè)實(shí)例的原型鏈上。

當(dāng)然,結(jié)果顯示,PersonObjectprototype屬性在usr的原型鏈上。usr不是Person2的實(shí)例,故Person2prototype屬性不在usr的原型鏈上。

2. 實(shí)現(xiàn)instanceof

明白了instanceof的功能和原理后,可以自己實(shí)現(xiàn)一個(gè)instanceof同樣功能的函數(shù):

function myInstanceof(obj, constructor) {
    // obj的隱式原型
    let implicitPrototype = obj?.__proto__;
    // 構(gòu)造函數(shù)的原型
    const displayPrototype = constructor.prototype;
    // 遍歷原型鏈
    while (implicitPrototype) {
        // 找到,返回true
        if (implicitPrototype === displayPrototype) return true;
        implicitPrototype = implicitPrototype.__proto__;
    }
    // 遍歷結(jié)束還沒(méi)找到,返回false
    return false;
}

myInstanceof函數(shù)接收兩個(gè)參數(shù):實(shí)例對(duì)象obj和構(gòu)造函數(shù)constructor。

首先拿到實(shí)例對(duì)象的隱式原型:obj.__proto__,構(gòu)造函數(shù)的原型對(duì)象constructor.prototype

接著,就可以通過(guò)不斷得到上一級(jí)的隱式原型

implicitPrototype = implicitPrototype.__proto__;

來(lái)遍歷原型鏈,尋找displayPrototype是否在原型鏈上,若找到,返回true

當(dāng)implicitPrototypenull時(shí),結(jié)束尋找,沒(méi)有找到,返回false。

原型鏈其實(shí)就是一個(gè)類(lèi)似鏈表的數(shù)據(jù)結(jié)構(gòu)。

instanceof做的事,就是在鏈表上尋找有沒(méi)有目標(biāo)節(jié)點(diǎn)。從表頭節(jié)點(diǎn)開(kāi)始,不斷向后遍歷,若找到目標(biāo)節(jié)點(diǎn),返回true。遍歷結(jié)束還沒(méi)找到,返回false。

3. 驗(yàn)證

寫(xiě)一個(gè)簡(jiǎn)單的實(shí)例驗(yàn)證一下自己實(shí)現(xiàn)的instanceof

function Person() {}
function Person2() {}

const usr = new Person();

function myInstanceof(obj, constructor) {
    let implicitPrototype = obj?.__proto__;
    const displayPrototype = constructor.prototype;
    while (implicitPrototype) {
        if (implicitPrototype === displayPrototype) return true;
        implicitPrototype = implicitPrototype.__proto__;
    }
    return false;
}

myInstanceof(usr, Person); // true
myInstanceof(usr, Object); // true

myInstanceof(usr, Person2); // false
myInstanceof(usr, Function); // false

myInstanceof(usr.__proto__, Person); // false
usr.__proto__ instanceof Person; // false

可以看到,myInstanceof正確得出了結(jié)果。

有趣的是,usr.__proto__ instanceof Person返回false,說(shuō)明obj instanceof constructor檢測(cè)的原型鏈,不包括obj節(jié)點(diǎn)本身。

JavaScript常見(jiàn)手寫(xiě)代碼:

「GitHub—code-js」

到此這篇關(guān)于JavaScript 手動(dòng)實(shí)現(xiàn)instanceof的文章就介紹到這了,更多相關(guān)JavaScript instanceof內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 懸浮廣告方法日常收集整理

    懸浮廣告方法日常收集整理

    這篇文章主要介紹了懸浮廣告方法日常收集整理的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • JavaScript訪問(wèn)CSS屬性的幾種方式介紹

    JavaScript訪問(wèn)CSS屬性的幾種方式介紹

    要通過(guò)元素訪問(wèn)樣式表,那么就應(yīng)該先確定是哪個(gè)元素。直接訪問(wèn)樣式表在該樣式塊里找相應(yīng)的樣式規(guī)則,最后在該樣式規(guī)則里找相應(yīng)的樣式
    2014-07-07
  • 微信小程序 騰訊地圖SDK 獲取當(dāng)前地址實(shí)現(xiàn)解析

    微信小程序 騰訊地圖SDK 獲取當(dāng)前地址實(shí)現(xiàn)解析

    這篇文章主要介紹了微信小程序 騰訊地圖SDK 獲取當(dāng)前地址實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • JavaScript缺少insertAfter解決方案

    JavaScript缺少insertAfter解決方案

    這篇文章主要介紹了JavaScript缺少insertAfter解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JS實(shí)現(xiàn)消滅星星小游戲

    JS實(shí)現(xiàn)消滅星星小游戲

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)消滅星星小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 4 種滾動(dòng)吸頂實(shí)現(xiàn)方式的比較

    4 種滾動(dòng)吸頂實(shí)現(xiàn)方式的比較

    這篇文章主要介紹了4種滾動(dòng)吸頂實(shí)現(xiàn)方式的比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript基于對(duì)象去除數(shù)組重復(fù)項(xiàng)的方法

    JavaScript基于對(duì)象去除數(shù)組重復(fù)項(xiàng)的方法

    這篇文章主要介紹了JavaScript基于對(duì)象去除數(shù)組重復(fù)項(xiàng)的方法,結(jié)合實(shí)例形式分析了javascript數(shù)組去重的操作步驟與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • 使用微信小程序顯示用戶當(dāng)前地理位置的詳細(xì)代碼

    使用微信小程序顯示用戶當(dāng)前地理位置的詳細(xì)代碼

    這篇文章主要介紹了使用微信小程序顯示用戶當(dāng)前地理位置的詳細(xì)代碼,在微信小程序的開(kāi)發(fā)中不可避免的會(huì)遇到需要顯示用戶地理位置的操作,本文將簡(jiǎn)單介紹如何在微信小程序中顯示用戶當(dāng)前的地理位置,需要的朋友可以參考下
    2022-06-06
  • js GridView 實(shí)現(xiàn)自動(dòng)計(jì)算操作代碼

    js GridView 實(shí)現(xiàn)自動(dòng)計(jì)算操作代碼

    js操作GridView,實(shí)現(xiàn)自動(dòng)計(jì)算的實(shí)現(xiàn)代碼,下面的代碼運(yùn)行即可
    2009-03-03
  • JS判斷兩個(gè)對(duì)象內(nèi)容是否相等的方法示例

    JS判斷兩個(gè)對(duì)象內(nèi)容是否相等的方法示例

    這篇文章主要介紹了JS判斷兩個(gè)對(duì)象內(nèi)容是否相等的方法,結(jié)合具體實(shí)例形式分析了javascript針對(duì)字符串、數(shù)組及對(duì)象的相關(guān)判斷技巧,需要的朋友可以參考下
    2017-04-04

最新評(píng)論