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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

對(duì)于prototype和new的疑問

我將

fNOP.prototype?=??this.prototype;
fBound.prototype?=?new?fNOP();

替換為

fBound.prototype?=?fNOP.prototype?=??this.prototype;

使用 func() 或者 new func()結(jié)果都和沒有改變,所以我不是太明白這里。

正在回答

4 回答

自問自答好開森哇

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

JFeng 提問者

=。= 標(biāo)記一下免得忘了,老師我寫的對(duì)不對(duì)。
2015-08-19 回復(fù) 有任何疑惑可以回復(fù)我~

我來補(bǔ)充一下,不知道對(duì)不對(duì):

我糾結(jié)的地方主要是為什么要“中轉(zhuǎn)”(fNOP.prototype?=??this.prototype;)?

  • 根據(jù)知乎有關(guān)繼承文章里的解釋,簡(jiǎn)單來說:a.prototype = b.prototype?這種方式會(huì)導(dǎo)致一方修改值另一方也會(huì)跟著改變,不能算是繼承,所以需要使用new XXX()的方式繼承fBound(func)。

  • 但是因?yàn)閠his沒有辦法直接使用 a.prototype = new b() 的方式進(jìn)行繼承操作。

  • 所以需要進(jìn)行“中轉(zhuǎn)”操作,也就是“fNOP.prototype = this.prototype”,中轉(zhuǎn)后就可以使用new XXX()的方式了。

  • 其實(shí)在ES5中相當(dāng)于fBound.prototype = Object.create(this.prototype);,這樣在ES5中對(duì)于this.prototype就不用“中轉(zhuǎn)”操作了。


1 回復(fù) 有任何疑惑可以回復(fù)我~

個(gè)人認(rèn)為,

fNOP.prototype?=?this.prototype;

fBound.prototype?=?new?fNOP();

主要為了實(shí)現(xiàn)bind后返回的函數(shù)對(duì)原函數(shù)的原型繼承。

例子:

如果上述代碼不加上,那么:

function foo(b){

this.c = 100;

return this.a+b;

}

foo.prototype.sayhi = function(){

alert('hi');

}

var func = foo.bind({a:1},20);

var t1 = func();

var t = new func({a:10},300);

alert(func.prototype===foo.prototype);//false

alert(t.c);

t.sayhi();//報(bào)錯(cuò),sayhi is not a function

但是如果加上了就bind后return回來的函數(shù)就擁有了foo的原型。

其實(shí)光從這點(diǎn)講,樓主的代碼也可以改為:

fBound.prototype?=??this.prototype;

然后運(yùn)行上述代碼后,t.sayhi()是執(zhí)行成功的。這里存在的問題是我改變了func的prototype,foo的prototype也會(huì)跟著變,所以不推薦。

最后說個(gè)題外話,在bind函數(shù)內(nèi)部,fBound內(nèi)部判斷this instanceof fNop,個(gè)人覺得不清晰(雖然是正確的),改成 this instanceof fBound ,這樣才更清晰,因?yàn)閚ew函數(shù)生成的實(shí)例按理說應(yīng)該指向它的構(gòu)造函數(shù)。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕粉3540272

請(qǐng)問一下,對(duì)于這里:fBound.prototype = this.prototype; 為什么說改變了func的prototype會(huì)影響到foo的prototype呢?
2016-07-01 回復(fù) 有任何疑惑可以回復(fù)我~
#2

熬夜對(duì)身體不好所以要通宵 回復(fù) 慕粉3540272

去了解下值類型和引用類型的區(qū)別吧
2019-04-30 回復(fù) 有任何疑惑可以回復(fù)我~

我明白這里的區(qū)別是什么了,方法一會(huì)拷貝一個(gè)fNOP的prototype給fBound,由于是拷貝所以修改fBound的prototype不會(huì)影響到fNOP的prototype。

其實(shí)這兩種方法是等價(jià)的:

fNOP.prototype?=?this.prototype;
fBound.prototype?=?new?fNOP();


fBound.prototype?=?Object.creat(this.prototype);


1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

meow_meow

完美!
2016-03-10 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
JavaScript深入淺出
  • 參與學(xué)習(xí)       281098    人
  • 解答問題       1047    個(gè)

由淺入深學(xué)習(xí)JS語(yǔ)言特性,且解析JS常見誤區(qū),從入門到掌握

進(jìn)入課程

對(duì)于prototype和new的疑問

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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