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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

javascript面向?qū)ο箢}目

javascript面向?qū)ο箢}目

慕前端8664132 2016-09-09 01:02:32
?window.a=300;? ? function fn1(){? ? ? this.a=100;? ? ? this.b=200;? ? ? return function(){? ? ? ? alert(this.a);? ? ? }.call(arguments[0]);? ? }? ? function fn2(){? ? ? this.a=new fn1();? ? }? ? var a=new fn1().b;//300? ? ? ? //{a:100,b:200}.b? ? //a=200? ? var v=new fn1(fn2());? ? ? ? ? //200 [object Object]? ? //fn2(): a={a:100,b:200}? ? //v:{a:100,b:200}雙斜扛后面是輸出結(jié)果?為什么是這樣?。縥s引擎到底怎么走的?
查看完整描述

1 回答

已采納
?
stone310

TA貢獻(xiàn)361條經(jīng)驗(yàn) 獲得超191個(gè)贊

首先,this是在創(chuàng)建的時(shí)候調(diào)用
? ? 先看new fn1(),就是對(duì)fn1創(chuàng)建了個(gè)實(shí)例,指向fn1.prototype,因此this.a=100,this.b=200中的this就是fn1.prototype,也就是fn1,因此

new?fn1().a=100;
new?fn1().b=200;

? ? 接下來是return function(){};這么寫相當(dāng)于將函數(shù)返回出去,相當(dāng)于在全局作用域中創(chuàng)建一個(gè)function,當(dāng)進(jìn)行到return function這一步,這個(gè)函數(shù)里面的this已經(jīng)是window了,不再是fn1;而.call(arguments[0])的意思是如果存在第一個(gè)參數(shù),則將這個(gè)return的函數(shù)中的this綁定為第一個(gè)參數(shù);

現(xiàn)在開始,
第一步,執(zhí)行var a=new fn1().b,(第一個(gè)實(shí)例)

alert(this.a)是屬于return function中的,是在創(chuàng)建實(shí)例的過程中執(zhí)行,而var a=new fn1().b;是實(shí)例創(chuàng)建好后,再去查找b的值,所以先執(zhí)行alert(this.a);

因?yàn)闆]有賦予參數(shù),所以return function中的this就是window,因此alert(this.a)彈出300;new fn1().b為200,所以經(jīng)過var a=new fn1().b后,

?window.a=200;
?new?fn1()={a:100,b:200}

第二步,執(zhí)行new fn1(fn2()),參數(shù)是fn2(),因此call()方法將fn1()里面return的函數(shù)中的this綁定為fn2();因此創(chuàng)建實(shí)例(第二個(gè)實(shí)例)中的alert(this.a),就是alert(fn2().a),也就是alert(new fn1()),再次創(chuàng)建fn1實(shí)例(第三個(gè)實(shí)例),因?yàn)閣indow.a是200,

因此創(chuàng)建實(shí)例中(第三個(gè)實(shí)例)的alert(this.a)彈出為200(步驟與第一步一樣);
第三個(gè)實(shí)例創(chuàng)建完畢,繼續(xù)執(zhí)行第二個(gè)實(shí)例中alert(new fn1())中的這個(gè)alert;new fn1()就是{a:100,b:200},

因此彈出[object Object],其實(shí)內(nèi)部就是{a:100,b:200},可用console.log查看;

彈完2個(gè)alert,實(shí)例(第二個(gè)實(shí)例)創(chuàng)建完成,

window.a=200;
new?fn1()={a:100,b:200}
v={a:100,b:200}


查看完整回答
2 反對(duì) 回復(fù) 2016-09-09
  • 1 回答
  • 0 關(guān)注
  • 1863 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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