玩转面试之JavaScript - instanceof原理

2018-04-12  本文已影响0人  lianmeng

关于instanceof问题不多,通常会和typeof一起问。

初阶问题:
问题:typeof能干什么?

回答:判断基本类型的,比如:Number, Boolean, Undefined, String, Null, 其他的引用类型和Null会返回object;

问题:如果一个对象是数组,应该怎么判断?

回答:用instanceof,比如对象是arr,用arr instanceof Array,如果返回ture就表示是数组,为false就不是。

问题:那如果那个数组对象和Object对象去做运算应该返回什么呢?

回答:true,因为Object是所有对象的基类。

进阶问题

问题:那下面代码中三个输出为何?

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

问题:那instanceof的原理是什么?

image

这是关于上面这个函数的原型链图,我们可以看到对象s有一条属于自己的原型链,然而Student,Person,和Object对象的原型属性所指向的原型对象都在这条原型链上,所以答案就出来了:

检测对象A是不是另一个对象B的实例的原理是:查看对象B的prototype属性指向的原型对象是否在对象A的原型链上,若在则返回true,若不在则返回false

作者:良民

链接:https://www.jianshu.com/p/5cfef021603d

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读