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

一个原型链继承的笔试题

一个原型链继承的笔试题

不负相思意 2019-05-14 09:40:52
functionfoo(){};functionbar(){return{method:function(){}};};foo.prototype=newbar();console.log(foo.prototypeinstanceofbar);//false为什么上面的判断返回false?我自己试了一下,如果把bar()里面的return内容去掉就返回true,请教一下大神们为什么?functionfoo(){};functionbar(){};foo.prototype=newbar();console.log(foo.prototypeinstanceofbar);//true
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

构造函数如果有return,那么return内容就是构造函数的返回值,所以这里foo.prototype实际上是个bar返回的对象,constructor是Object构造函数而不是bar函数
                            
查看完整回答
反对 回复 2019-05-14
?
慕森王

TA贡献1777条经验 获得超3个赞

补充一下,楼主要去深入理解一下instanceof具体是通过什么来判断,上面的笔试题可以简化为:
functionbar(){
return{
method:function(){}
}
};
console.log(newbar()instanceofbar);
或者
console.log({method:function(){}}instanceofbar);
instanceof的本质是什么呢?ainstanceofb就等价于myInstanceof(a,b)
functionmyInstanceof(obj,fn){
vargetPrototypeOf=Object.getPrototypeOf;
varproto=obj;
while(getPrototypeOf&&getPrototypeOf(proto)||proto.__proto__){
if(proto===fn.prototype){
returntrue;
}
}
returnfalse;
}
                            
查看完整回答
反对 回复 2019-05-14
  • 2 回答
  • 0 关注
  • 791 浏览
慕课专栏
更多

添加回答

举报

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