【前端面試】instanceof原理

追風少年在掘金發表於2018-08-24

1、instanceof的作用是用來做檢測型別:

(1)instanceof可以檢測某個物件是不是另一個物件的例項;

var Person = function() {};
var student = new Person();
console.log(student instanceof Person);  // true
複製程式碼

(2)instanceof可以檢測父型別;

function Person() {};
function Student() {};
var p = new Person();
Student.prototype=p; //繼承原型
var s=new Student();
console.log(s instanceof Student); //true
console.log(s instanceof Person); //true
複製程式碼

但是,instanceof不適合檢測一個物件本身的型別。

2、instanceof 檢測一個物件A是不是另一個物件B的例項的原理:

檢視物件B的prototype指向的物件是否在物件A的[[prototype]]鏈上。如果在,則返回true,如果不在則返回false。不過有一個特殊的情況,當物件B的prototype為null將會報錯(類似於空指標異常)。

函式模擬A instanceof B:

function _instanceof(A, B) {
    var O = B.prototype;// 取B的顯示原型
    A = A.__proto__;// 取A的隱式原型
    while (true) {
        //Object.prototype.__proto__ === null
        if (A === null)
            return false;
        if (O === A)// 這裡重點:當 O 嚴格等於 A 時,返回 true
            return true;
        A = A.__proto__;
    }
}
複製程式碼

推薦部落格:

(1)js中的instanceof運算子

(2)今日頭條面試總結——instanceof原理

(3)javascript中原型鏈與instanceof原理

相關文章