js中的instanceof


概述

instanceof運算符用來判斷一個構造函數的prototype屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上

語法

obj instanceof Object;//true 實例obj在不在Object構造函數中

描述

instanceof 運算符用來檢測 constructor.prototype 是否存在於參數 object 的原型鏈上。


實例

1.instanceof的普通的用法,obj instanceof Object 檢測Object.prototype是否存在於參數obj的原型鏈上。

Person的原型在p的原型鏈中

function Person(){}; var p =new Person(); console.log(p instanceof Person);//true

2.繼承中判斷實例是否屬於它的父類

Student和Person都在s的原型鏈中

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

3.復雜用法

這里的案例要有熟練的原型鏈的認識才能理解

function Person() {} console.log(Object instanceof Object); //true //第一個Object的原型鏈:Object=> //Object.__proto__ => Function.prototype=>Function.prototype.__proto__=>Object.prototype //第二個Object的原型:Object=> Object.prototype console.log(Function instanceof Function); //true //第一個Function的原型鏈:Function=>Function.__proto__ => Function.prototype //第二個Function的原型:Function=>Function.prototype console.log(Function instanceof Object); //true //Function=> //Function.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype //Object => Object.prototype console.log(Person instanceof Function); //true //Person=>Person.__proto__=>Function.prototype //Function=>Function.prototype console.log(String instanceof String); //false //第一個String的原型鏈:String=> //String.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype //第二個String的原型鏈:String=>String.prototype console.log(Boolean instanceof Boolean); //false //第一個Boolean的原型鏈:Boolean=> //Boolean.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype //第二個Boolean的原型鏈:Boolean=>Boolean.prototype console.log(Person instanceof Person); //false //第一個Person的原型鏈:Person=> //Person.__proto__=>Function.prototype=>Function.prototype.__proto__=>Object.prototype //第二個Person的原型鏈:Person=>Person.prototype 

總結

對應上述規范做個函數模擬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__; } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM