亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超22個贊

依據就是原型鏈prototype!
o2instanceofO2意思是說o2.__proto__能不能在O2的原型鏈上找得到.
第二個中本來o2.__proto__===O2.prototype,但是你后面把O2.prototype改了,所以就不等了,結果自然是false;
第三個你只是改了O2.prototype中的一個屬性,沒改變O2.prototype的指向,所以返回true,
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 331 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號