關(guān)于instanceof問(wèn)題不多,通常會(huì)和typeof一起問(wèn)。
初階問(wèn)題:
問(wèn)題:typeof能干什么?
回答:判斷基本類型的,比如:Number, Boolean, Undefined, String, Null, 其他的引用類型和Null會(huì)返回object;
問(wèn)題:如果一個(gè)對(duì)象是數(shù)組,應(yīng)該怎么判斷?
回答:用instanceof,比如對(duì)象是arr,用arr instanceof Array,如果返回ture就表示是數(shù)組,為false就不是。
問(wèn)題:那如果那個(gè)數(shù)組對(duì)象和Object對(duì)象去做運(yùn)算應(yīng)該返回什么呢?
回答:true,因?yàn)镺bject是所有對(duì)象的基類。
進(jìn)階問(wèn)題
問(wèn)題:那下面代碼中三個(gè)輸出為何?
function Person(name, age){
this.name = name;
this.age = age;
}
function Student(score){
this.score = score;
}
Student.prototype = new Person('李明',22);
var s = new Student(99);
console.log(s instanceof Student); //true
console.log(s instanceof Person); //true
console.log(s instanceof Object); //true
問(wèn)題:那instanceof的原理是什么?
這是關(guān)于上面這個(gè)函數(shù)的原型鏈圖,我們可以看到對(duì)象s有一條屬于自己的原型鏈,然而Student,Person,和Object對(duì)象的原型屬性所指向的原型對(duì)象都在這條原型鏈上,所以答案就出來(lái)了:
檢測(cè)對(duì)象A是不是另一個(gè)對(duì)象B的實(shí)例的原理是:查看對(duì)象B的prototype屬性指向的原型對(duì)象是否在對(duì)象A的原型鏈上,若在則返回true,若不在則返回false。
作者:良民
鏈接:http://m.itdecent.cn/p/5cfef021603d
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。