关于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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论