为了账号安全,请及时绑定邮箱和手机立即绑定

一个原型链继承的笔试题

一个原型链继承的笔试题

有只小跳蛙 2019-03-20 21:19:58
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
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-04-09
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

补充一下,楼主要去深入理解一下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;

}


查看完整回答
反对 回复 2019-04-09
  • 3 回答
  • 0 关注
  • 516 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信