掌握instanceof原理,面試無憂
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