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函数
慕森王
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;}
添加回答
举报
0/150
提交
取消