最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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é)束還沒找到,返回false
    return false;
}

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

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

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

implicitPrototype = implicitPrototype.__proto__;

來遍歷原型鏈,尋找displayPrototype是否在原型鏈上,若找到,返回true。

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

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

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

3. 驗(yàn)證

寫一個(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,說明obj instanceof constructor檢測(cè)的原型鏈,不包括obj節(jié)點(diǎn)本身。

JavaScript常見手寫代碼:

「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)文章

  • 基于JavaScript或jQuery實(shí)現(xiàn)網(wǎng)站夜間/高亮模式

    基于JavaScript或jQuery實(shí)現(xiàn)網(wǎng)站夜間/高亮模式

    這篇文章主要介紹了基于JavaScript或jQuery實(shí)現(xiàn)網(wǎng)站夜間/高亮模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • JavaScript SHA512&SHA256加密算法詳解

    JavaScript SHA512&SHA256加密算法詳解

    本文給大家分享的是javascript版的SHA512&SHA256加密算法的代碼,以及用法,有需要的小伙伴可以參考下。
    2015-08-08
  • javascript實(shí)現(xiàn)手機(jī)震動(dòng)API代碼

    javascript實(shí)現(xiàn)手機(jī)震動(dòng)API代碼

    一個(gè)新的API出來了。HTML5 (很快)將支持用戶設(shè)備振動(dòng)。這明顯是很有趣的事情,比如它可以用戶觸發(fā)提醒,提升游戲體驗(yàn),下面小編給大家整理javascript手機(jī)震動(dòng)api,需要的朋友可以參考下
    2015-08-08
  • javascript中setTimeout使用指南

    javascript中setTimeout使用指南

    本文給大家通過3個(gè)方法向大家展示了javascript中的setTimeout的使用,非常的簡(jiǎn)單,有需要的小伙伴可以參考下。
    2015-07-07
  • JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能完整示例

    JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能完整示例

    這篇文章主要介紹了JS實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證功能,結(jié)合完整實(shí)例形式分析了JS滑動(dòng)拼圖驗(yàn)證相關(guān)原理、實(shí)現(xiàn)步驟與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • JavaScript實(shí)現(xiàn)在數(shù)組中查找不同順序排列的字符串

    JavaScript實(shí)現(xiàn)在數(shù)組中查找不同順序排列的字符串

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)在數(shù)組中查找不同順序排列的字符串,本文用兩個(gè)方法解決了這道算法題,需要的朋友可以參考下
    2014-09-09
  • 微信小程序獲取手機(jī)號(hào)的踩坑記錄

    微信小程序獲取手機(jī)號(hào)的踩坑記錄

    這篇文章主要給大家介紹了關(guān)于微信小程序獲取手機(jī)號(hào)踩坑的相關(guān)資料,詳細(xì)記錄了踩坑的過程以及解決的方法和猜想,通過示例代碼以及圖片介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • js使用遞歸解析xml

    js使用遞歸解析xml

    這篇文章主要介紹了js使用遞歸解析xml,需要的朋友可以參考下
    2014-12-12
  • Javascript中typeof 用法小結(jié)

    Javascript中typeof 用法小結(jié)

    JavaScript中的typeof其實(shí)非常復(fù)雜,他有六種返回的數(shù)據(jù)類型,它可以用來做很多事情,但同時(shí)也有很多怪異的表現(xiàn).本文列舉出了它的多個(gè)用法,有需要的小伙伴可以參考下。
    2015-05-05
  • js精度丟失解決方案(響應(yīng)和預(yù)覽數(shù)據(jù)不一致)

    js精度丟失解決方案(響應(yīng)和預(yù)覽數(shù)據(jù)不一致)

    Java后端使用雪花算法生成的長(zhǎng)ID在前端顯示時(shí)因JavaScript數(shù)字精度限制(最大安全整數(shù)為2^53)導(dǎo)致最后兩位丟失,這篇文章主要介紹了關(guān)于js精度丟失解決方案的相關(guān)資料,需要的朋友可以參考下
    2025-06-06

最新評(píng)論

拜城县| 白河县| 合作市| 将乐县| 上犹县| 灵山县| 南投县| 承德市| 靖江市| 鄂托克前旗| 区。| 阜康市| 元江| 高尔夫| 金乡县| 万载县| 沈丘县| 建昌县| 贵州省| 甘孜县| 恭城| 婺源县| 唐河县| 六盘水市| 安岳县| 汉阴县| 肃南| 宝兴县| 西盟| 朝阳区| 岳阳市| 兴仁县| 沙坪坝区| 民和| 临湘市| 子长县| 澄江县| 临西县| 平安县| 台东市| 延寿县|