一个原型链继承的笔试题

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
不负相思意
浏览 792回答 2
2回答

吃鸡游戏

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

慕森王

补充一下,楼主要去深入理解一下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;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript