javascript中instanceof運算符的用法詳解
概述
instanceof運算符用來判斷一個構(gòu)造函數(shù)的prototype屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上
語法
obj instanceof Object;//true 實例obj在不在Object構(gòu)造函數(shù)中
描述
instanceof 運算符用來檢測 constructor.prototype 是否存在于參數(shù) object 的原型鏈上。
實例
1.instanceof的普通的用法,obj instanceof Object 檢測Object.prototype是否存在于參數(shù)obj的原型鏈上。
Person的原型在p的原型鏈中
function Person(){};
var p =new Person();
console.log(p instanceof Person);//true2.繼承中判斷實例是否屬于它的父類
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);//true3.復(fù)雜用法
這里的案例要有熟練的原型鏈的認識才能理解
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總結(jié)
對應(yīng)上述規(guī)范做個函數(shù)模擬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__;
}
}到此這篇關(guān)于javascript中instanceof運算符的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript高級程序設(shè)計(第3版)學習筆記9 js函數(shù)(下)
函數(shù)是一種對象,擁有一般對象具有的所有特征,除了函數(shù)可以有自己的屬性和方法外,還可以做為一個引用類型的值去使用,實際上我們前面的例子中已經(jīng)有過將函數(shù)作為一個對象屬性的值,又比如函數(shù)也可以作為另一個函數(shù)的參數(shù)或者返回值,異步處理中的回調(diào)函數(shù)就是一個典型的用法2012-10-10
實現(xiàn)高性能JavaScript之執(zhí)行與加載
avaScript在瀏覽器中的性能,此問題因JavaScript的阻塞特征而復(fù)雜,也就是說JavaScript運行時其他的事情不能被瀏覽器處理,事實上,大多數(shù)瀏覽器使用單進程處理JavaScript運行等多個任務(wù),而同一時間只能有一個任務(wù)被執(zhí)行。2016-01-01
舉例講解JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法
這篇文章主要介紹了JavaScript中將數(shù)組元素轉(zhuǎn)換為字符串的方法,是JS入門學習中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
js創(chuàng)建jsonArray傳輸至后臺及后臺全面解析
下面小編就為大家?guī)硪黄猨s創(chuàng)建jsonArray傳輸至后臺及后臺全面解析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。2016-04-04
Javascript學習筆記之 對象篇(一) : 對象的使用和屬性
Javascript 中的一切都可以視為對象,除了兩個特例:null 和 undefined。2014-06-06

