一个原型链继承的笔试题

function foo(){};

function bar(){

    return{

        method: function(){}

    };

};

foo.prototype = new bar();

console.log(foo.prototype instanceof bar);//false

为什么上面的判断返回false?

我自己试了一下,如果把bar()里面的return内容去掉就返回true,请教一下大神们为什么?


function foo(){};

function bar(){};

foo.prototype = new bar();

console.log(foo.prototype instanceof bar);//true


有只小跳蛙
浏览 517回答 3
3回答

互换的青春

构造函数如果有return,那么return内容就是构造函数的返回值,所以这里foo.prototype实际上是个bar返回的对象,constructor是Object构造函数而不是bar函数

梵蒂冈之花

补充一下,楼主要去深入理解一下instanceof 具体是通过什么来判断,上面的笔试题可以简化为:function bar(){    return{          method: function(){}    }};console.log( new bar() instanceof bar);或者console.log( {method: function(){}} instanceof bar);instanceof的本质是什么呢? a instanceof b 就等价于 myInstanceof( a, b) function myInstanceof( obj , fn ){    var getPrototypeOf =Object.getPrototypeOf;    var proto=obj ;    while(getPrototypeOf && getPrototypeOf(proto)||proto.__proto__){        if( proto === fn.prototype ){            return true;        }    }    return false;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript