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__;
}
}
複製程式碼
推薦部落格: