第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

幾處代碼不知是否理解正確?

幾處代碼不知是否理解正確?

明月笑刀無情 2019-05-22 17:58:09
functionFoo(){getName=function(){alert(1);}console.log(this)returnthis;}Foo.getName=function(){alert(2);}Foo.prototype.getName=function(){alert(3);}vargetName=function(){alert(4);}functiongetName(){alert(5);}Foo.getName();//2這里是不是因為構(gòu)造函數(shù)Foo中的getName方法沒有this關(guān)鍵字,所以就不是1,而是直接采用外部的方法,意思就是Foo對象調(diào)用getName的時候彈出2??getName();//4Foo().getName();//1這里為什么是1呢?是因為Foo返回了this對象,這里的this對象是window,所以這句話的意思不是應(yīng)該等同window.getName()??那應(yīng)該是4啊為什么是1getName();//1這里變成1是不是因為3的那一步Foo返回了this對象,所以改變了全局函數(shù)getName??所以返回1newFoo.getName();//2newFoo().getName();//3newnewFoo().getName();//35-7不是很理解,解釋不出原因。5是不是new關(guān)鍵字其實沒起什么作用呢?都只是調(diào)用一個方法而已?
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻1795條經(jīng)驗 獲得超7個贊

Foo.getName();//2
直接調(diào)用Foo自己的方法,而不是Foo對象的方法。Foo自己的方法是alert(2)那個,所以彈出2。
getName();//4
這個沒什么好說的,函數(shù)聲明提升。
Foo().getName();//1
這個就比較微妙了。仔細看Foo函數(shù),它的getName沒有用var聲明,所以這個getName實際上是window的,所以window的getName會被重新賦值。而它最后又返回了this,由于沒有用new調(diào)用,所以這里的this是window。
綜上,最終彈出的是1。
getName();//1
上一步把window的getName重新賦值了,所以這里彈出1。
newFoo.getName();//2
這里的new沒有任何作用。因為Foo沒有加括號,所以它實際上是先調(diào)用Foo.getName(),彈出2,然后再去new它的返回結(jié)果,也就是undefined。
newFoo().getName();//3
這個加了括號,所以是先new一個Foo對象,再去調(diào)它的getName方法。Foo對象自身沒有g(shù)etName方法,去它的原型上去找,也就是彈出3的那個。
newnewFoo().getName();//3
最前面的new沒意義,實際執(zhí)行的時候是這樣的:new(newFoo().getName()),括號里的與前一條相同,最后的返回值為undefined,所以最前面那個new沒有實際意義。
                            
查看完整回答
反對 回復(fù) 2019-05-22
  • 2 回答
  • 0 關(guān)注
  • 389 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號