91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript如何手動實現instanceof

發布時間:2021-10-29 13:05:13 來源:億速云 閱讀:137 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關JavaScript如何手動實現instanceof,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1. instanceof的用法

instanceof運算符用于檢測構造函數的prototype屬性是否出現在某個實例對象原型鏈上。

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

如上代碼,定義了兩個構造函數,PersonPerson2,又實用new操作創建了一個Person的實例對象usr

實用instanceof操作符,分別檢驗構造函數prototype屬性是否在usr這個實例的原型鏈上。

當然,結果顯示,PersonObjectprototype屬性在usr的原型鏈上。usr不是Person2的實例,故Person2prototype屬性不在usr的原型鏈上。

2. 實現instanceof

明白了instanceof的功能和原理后,可以自己實現一個instanceof同樣功能的函數:

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

myInstanceof函數接收兩個參數:實例對象obj和構造函數constructor

首先拿到實例對象的隱式原型:obj.__proto__,構造函數的原型對象constructor.prototype

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

implicitPrototype = implicitPrototype.__proto__;

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

implicitPrototypenull時,結束尋找,沒有找到,返回false

原型鏈其實就是一個類似鏈表的數據結構。

instanceof做的事,就是在鏈表上尋找有沒有目標節點。從表頭節點開始,不斷向后遍歷,若找到目標節點,返回true。遍歷結束還沒找到,返回false

3. 驗證

寫一個簡單的實例驗證一下自己實現的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正確得出了結果。

關于“JavaScript如何手動實現instanceof”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲁山县| 大丰市| 罗田县| 裕民县| 和田县| 礼泉县| 荣成市| 威海市| 盖州市| 宁化县| 英吉沙县| 乐山市| 无锡市| 类乌齐县| 常熟市| 孟津县| 和硕县| 屏边| 东至县| 通山县| 古丈县| 泾川县| 安新县| 万安县| 滨州市| 江陵县| 淮北市| 常宁市| 竹山县| 白城市| 安福县| 梅河口市| 格尔木市| 施秉县| 乌兰浩特市| 巍山| 泰安市| 阿图什市| 荥阳市| 洛川县| 连江县|