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

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

在Derived.prototype = new Base使用'new'關(guān)鍵字的原因是什么

在Derived.prototype = new Base使用'new'關(guān)鍵字的原因是什么

在Derived.prototype = new Base使用'new'關(guān)鍵字的原因是什么以下代碼的作用如下:WeatherWidget.prototype = new Widget;哪里Widget是構(gòu)造函數(shù),我想用新函數(shù)擴展Widget'類' WeatherWidget。什么是new關(guān)鍵字在那里做什么,如果被遺漏會發(fā)生什么?
查看完整描述

4 回答

?
慕碼人2483693

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

根據(jù)一些奇怪的Javascript規(guī)則,new Widget實際上調(diào)用構(gòu)造函數(shù)而不是返回對構(gòu)造函數(shù)的引用。這個問題實際上回答了var a = new Widget()和之間的區(qū)別var a = Widget()。

簡單來說,new關(guān)鍵字告訴Javascript?Widget在一組不同于常規(guī)函數(shù)調(diào)用的規(guī)則下調(diào)用函數(shù)。脫離我的頭腦,我記得的是:

  1. 創(chuàng)建了一個全新的對象

  2. Widget可以使用this關(guān)鍵字來引用該對象。

  3. 如果Widget不返回任何內(nèi)容,則將創(chuàng)建此新對象。

  4. 此對象將繼承一些其他屬性,這些屬性將指示它是Widget用于跟蹤屬性鏈的。

如果沒有new關(guān)鍵字,則會調(diào)用窗口小部件

  1. 如果在嚴(yán)格模式下,this將設(shè)置為undefined.

  2. 否則,this將引用全局對象。(window由瀏覽器調(diào)用。)

  3. 如果函數(shù)沒有返回任何內(nèi)容,則undefined返回。

參考:?new關(guān)鍵字


查看完整回答
反對 回復(fù) 2019-05-29
?
Smart貓小萌

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

WeatherWidget.prototype?=?new?Widget;

確實創(chuàng)建了一個Widget構(gòu)造函數(shù)的新實例,并將其用作WeatherWidget原型對象。使用new關(guān)鍵字創(chuàng)建新對象,設(shè)置它的繼承鏈Widget.prototype,并在其上應(yīng)用構(gòu)造函數(shù)(您可以在其中設(shè)置單個屬性的'n'方法,或創(chuàng)建私有范圍的變量)。

沒有new關(guān)鍵字,它將是Widgetprototype屬性的函數(shù)賦值- 這沒有任何意義。如果你要添加可選括號(ie?Widget()),它會正常調(diào)用函數(shù),但不能作為新實例的構(gòu)造函數(shù),而是將全局對象作為上下文。另請參閱關(guān)鍵字的參考this。

請注意,您不應(yīng)該真正使用此代碼。如上所述,它通過調(diào)用構(gòu)造函數(shù)創(chuàng)建一個新實例。但目的只是創(chuàng)建一個從s原型對象繼承的對象Widget,而不是實例化某些東西(這可能會造成一些傷害,具體取決于代碼)。相反,你應(yīng)該使用Object.create(或其流行的墊片):

WeatherWidget.prototype?=?Object.create(Widget.prototype);


查看完整回答
反對 回復(fù) 2019-05-29
?
交互式愛情

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

用簡單的英語,你將一個班級擴展到另一個班級。原型只能是一個對象,所以你將WeatherWidget原型設(shè)置為一個新的實例Widget。如果刪除了new關(guān)鍵字,則將原型設(shè)置為文字構(gòu)造函數(shù),該函數(shù)不執(zhí)行任何操作。

var?Appendages?=?function(){
??this.legs?=?2};var?Features?=?function()?{
???this.ears?=?4;
???this.eyes?=?1;}//?Extend?Features?class?with?Appendages?class.Features.prototype?=?new?Appendages;var?sara?=?new?Features();sara.legs;
???//?Returns?2.

理解原型可以是任何對象,這樣的東西也可以工作:

var?appendages?=?{
??legs?:?2};var?Features?=?function()?{
???this.ears?=?4;
???this.eyes?=?1;}//?Extend?Features?class?with?Appendages?class.Features.prototype?=?appendages;var?sara?=?new?Features();sara.legs;
???//?Returns?2.

在JavaScript中,如果在對象上找不到鍵,它會檢查您從中擴展它的父對象。因此,您可以動態(tài)更改父對象上的項目,如下所示:

var?appendages?=?{
??legs?:?2};var?Features?=?function()?{
???this.ears?=?4;
???this.eyes?=?1;}//?Extend?Features?class?with?Appendages?class.Features.prototype?=?appendages;var?sara?=?new?Features();sara.legs;
???//?Returns?2.appendages.hair?=?true;sara.hair;//?Returns?true.

請注意,這一切都發(fā)生在實例化期間,這意味著您不能在創(chuàng)建對象后切換原型:

var?foo?=?{name?:?'bob'};var?bar?=?{nachos?:?'cheese'};foo.prototype?=?bar;foo.nachos;//?undefined

但是,所有現(xiàn)代瀏覽器都附帶這種更新的__proto__方法,允許您這樣做:

var?foo?=?{name?:?'bob'};var?bar?=?{nachos?:?'cheese'};foo.__proto__?=?bar;foo.nachos//?"cheese"


查看完整回答
反對 回復(fù) 2019-05-29
  • 4 回答
  • 0 關(guān)注
  • 636 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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