美文网首页程序员编程知识点代码改变世界
今日头条面试总结——instanceof原理

今日头条面试总结——instanceof原理

作者: 简心豆 | 来源:发表于2017-04-11 12:01 被阅读429次

    每次面试都会遇到各种自己从来没想过的问题,这才是面试的难点所在,所以作为面试者应该将自己所学知识融会贯通,这样才会回答的知其然,知其所以然,我想这才是面试官希望看到的。所以基础扎实是多么的重要。


    问题:typeof能干什么?
    回答:判断基本类型的,比如:Number, Boolean, Undefined, String, Null, 其他的引用类型和Null会返回object;

    问题:如果一个对象是数组,应该怎么判断?
    回答:用instanceof,比如对象是arr,用arr instanceof Array,如果返回ture就表示是数组,为false就不是。

    问题:那instanceof的原理是什么?
    回答:不知道。。。

    问题:那如果那个数组对象和Object对象去做运算应该返回什么呢?
    回答:true,因为Object是所有对象的基类。


    到这里这个问题就算是结束了,面试结束后我自己在网上查了下,才知道其实面试官最后问的那个问题已经是提示了,可我却。。。。一言难尽。

    下面进入正题,instanceof的原理是什么?
    先看这个例子:

    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
    

    可以看出上面这三个输出都为true,这是为什么呢?知道为什么,相信你
    已经知道原理了。不知道的可以看下面这张图:

    这里写图片描述

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

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


    由答案可以看出,面试官的最后一个问题已经是提示了。其实所有知识都是联通的,明白一个知识点肯定有它的用途,你知道原型就应该能想到instanceof的查询过程就是原型链的一个用途,可如果只是把知识点单独的分隔开,可能80%的题都回答不上来。

    相关文章

      网友评论

        本文标题:今日头条面试总结——instanceof原理

        本文链接:https://www.haomeiwen.com/subject/tsvyattx.html