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

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

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

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

紅顏莎娜 2019-03-12 20:16:50
function Foo(){            getName=function(){alert(1);}            console.log(this)            return this;        }            Foo.getName=function(){alert(2);}            Foo.prototype.getName=function(){alert(3);}            var getName=function(){alert(4);}            function getName(){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??所以返回1new Foo.getName();//2new Foo().getName(); //3new new Foo().getName(); //35-7不是很理解,解釋不出原因。5是不是new關(guān)鍵字其實沒起什么作用呢?都只是調(diào)用一個方法而已?
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊

Foo.getName(); //2

直接調(diào)用Foo自己的方法,而不是Foo對象的方法。Foo自己的方法是alert(2)那個,所以彈出2。

getName(); //4

這個沒什么好說的,函數(shù)聲明提升。

Foo().getName(); //1

這個就比較微妙了。仔細(xì)看Foo函數(shù),它的getName沒有用var聲明,所以這個getName實際上是window的,所以window的getName會被重新賦值。而它最后又返回了this,由于沒有用new調(diào)用,所以這里的this是window。

綜上,最終彈出的是1。

getName(); // 1

上一步把window的getName重新賦值了,所以這里彈出1。

new Foo.getName();//2

這里的new沒有任何作用。因為Foo沒有加括號,所以它實際上是先調(diào)用Foo.getName(),彈出2,然后再去new它的返回結(jié)果,也就是undefined。

new Foo().getName(); //3

這個加了括號,所以是先new一個Foo對象,再去調(diào)它的getName方法。Foo對象自身沒有g(shù)etName方法,去它的原型上去找,也就是彈出3的那個。

new new Foo().getName(); //3

最前面的new沒意義,實際執(zhí)行的時候是這樣的:new (new Foo().getName()),括號里的與前一條相同,最后的返回值為undefined,所以最前面那個new沒有實際意義。


查看完整回答
反對 回復(fù) 2019-03-25
  • 2 回答
  • 0 關(guān)注
  • 393 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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