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

JavaScript中instanceof到底是以什么为依据呢?

JavaScript中instanceof到底是以什么为依据呢?

慕慕森 2019-04-19 16:11:45
可以查找到的资料都说"Javascript的instanceof操作符可以用来比较两个操作数的构造函数constructor"。例如:细说JavaScript(三)我在实际中却被搞糊涂了,请看如下代码:functionO2(aa,bb){varaa=aa;this.bb=bb;}//1、正常情况varo2=newO2("a2","b2");console.log(o2instanceofO2);//true//2、修改了构造函数的原型对象varo4=newO2("a4","b4");O2.prototype={};console.log(o4instanceofO2);//false//3、修改了构造函数原型对象的constructor属性varo6=newO2("a6","b6");O2.prototype.constructor=Object;console.log(o6instanceofO2);//true问题来了:为什么2中可以导致false,而3中修改了构造函数原型对象的constructor属性却还是可以判断为true呢?说好的以constructor为依据呢?新问题来了:我在o4处已经改了O2.prototype={};所以o4返回了false为什么varo6=newO2("a6","b6");之后,o6又成了true呢?原型被o4处修改之后,原型对象不就永久改变了么?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

依据就是原型链prototype!
o2instanceofO2意思是说o2.__proto__能不能在O2的原型链上找得到.
第二个中本来o2.__proto__===O2.prototype,但是你后面把O2.prototype改了,所以就不等了,结果自然是false;
第三个你只是改了O2.prototype中的一个属性,没改变O2.prototype的指向,所以返回true,
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 320 浏览
慕课专栏
更多

添加回答

举报

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