2018-09-26instanceof原理

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

(1)instanceof可以檢測某個(gè)對象是不是另一個(gè)對象的實(shí)例;

var Person = function() {};

var student = new Person();

console.log(student instanceof Person); // true

復(fù)制代碼

(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

復(fù)制代碼

但是,instanceof不適合檢測一個(gè)對象本身的類型。

2、instanceof 檢測一個(gè)對象A是不是另一個(gè)對象B的實(shí)例的原理:

查看對象B的prototype指向的對象是否在對象A的[[prototype]]鏈上。如果在,則返回true,如果不在則返回false。不過有一個(gè)特殊的情況,當(dāng)對象B的prototype為null將會報(bào)錯(cuò)(類似于空指針異常)。

函數(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)// 這里重點(diǎn):當(dāng) O 嚴(yán)格等于 A 時(shí),返回 true

return true;

A = A.__proto__;

}

}獲取更多資料QQ群786276452

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JS中原型鏈,說簡單也簡單。 首先明確: 函數(shù)(Function)才有prototype屬性,對象(除Object...
    前小白閱讀 4,074評論 0 9
  • var navigator = navigator || {};var window = window || {}...
    DF_Sky閱讀 1,534評論 0 0
  • 26歲,你看著身邊的人都結(jié)了婚 婚禮的份子錢逐年遞增 春節(jié)回家,父母從帶你串親戚 變成了帶你去見相親對象 見了十幾...
    gracesmall7閱讀 455評論 0 1
  • 告訴我: 2016你有什么故事發(fā)生嗎?() 2017希望你過上自己喜歡的生活 再見 我們的2016 你好 你們的2017
    種橘子的小林子閱讀 110評論 7 1
  • 我們總是無法看清自己的生活,看不清前方,又不了解過去,日子過得好,全憑僥幸。——《里斯本夜車》 我坐在回家的出租車...
    DaNan_閱讀 462評論 1 3

友情鏈接更多精彩內(nèi)容