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

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

Javascript構造函數(shù)屬性的意義是什么?

Javascript構造函數(shù)屬性的意義是什么?

慕尼黑8549860 2019-06-24 16:06:49
Javascript構造函數(shù)屬性的意義是什么?試圖在Javascript的OO問題上彎腰.和其他許多人一樣,對constructor財產(chǎn)。特別是,constructor財產(chǎn),因為我似乎不能使它有任何影響。例如:function Foo(age) {     this.age = age;}function Bar() {     Foo.call(this, 42);     this.name = "baz"; }Bar.prototype = Object.create(Foo.prototype); var b = new Bar;    alert(b.constructor);      // "Foo". That's OK because we inherit `Foo`'s prototype.alert(b.name);              // "baz". Shows that Bar() was called as constructor.alert(b.age);               // "42", inherited from `Foo`.在上面的示例中,對象b似乎調用了正確的構造函數(shù)(Bar)-它繼承了從Foo..那么,為什么許多人認為這是必要的一步:Bar.prototype.constructor = Bar;很明顯,權利Bar構造器曾.構造時調用b,那么這個原型屬性會產(chǎn)生什么樣的影響呢?我很想知道讓構造函數(shù)屬性設置為“正確”實際上有什么區(qū)別-因為我看不出它對在創(chuàng)建對象之后實際調用哪個構造函數(shù)有任何影響。
查看完整描述

3 回答

?
慕的地8271018

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

這個constructor財產(chǎn)對任何內部事物都毫無實際意義。只有當您的代碼顯式地使用它時,它才是有用的。例如,您可能會決定需要每個對象都有一個對創(chuàng)建它的實際構造函數(shù)的引用;如果是這樣,則需要將constructor屬性在設置繼承時顯式地將對象分配給構造函數(shù)的prototype屬性,如您的示例所示。


查看完整回答
反對 回復 2019-06-24
?
藍山帝景

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

第一步是理解constructorprototype都是關于。這并不難,但我們必須放棄古典意義上的“繼承”。

構造函數(shù)

這個constructor財產(chǎn)導致程序中的任何特殊效果,除非您可以查看它以查看與運算符一起使用的函數(shù)。new來創(chuàng)建你的對象。如果你打字new Bar()它將是Bar你打字new Foo它將是Foo.

原型

這個prototype屬性用于在所述對象沒有所請求的屬性的情況下進行查找。如果你寫x.attr,JavaScript將試圖找到attrx的屬性。如果它找不到它,它將查找x.__proto__..如果它也不在那里,它就會往里面看x.__proto__.__proto__等等只要__proto__被定義。

所以什么是__proto__它和這件事有什么關系prototype?不久,prototype代表“類型”__proto__代表“實例”。(我這樣說是用引號表示的,因為類型和實例實際上沒有任何區(qū)別)。當你寫x = new MyType(),發(fā)生的事情(除其他外)是x.__proto___設置為MyType.prototype.

問題

現(xiàn)在,您只需通過上面的內容來推導出您自己的示例的含義,而是嘗試回答您的實際問題;“為什么要寫類似的東西”:

Bar.prototype.constructor = Bar;

我個人從未見過它,我覺得它有點傻,但在你給出的上下文中,這意味著Bar.prototype-對象(通過使用new Foo(42))將擺出已經(jīng)被創(chuàng)造出來的姿勢。Bar而不是Foo..我想這個想法是一些類似于C+/Java/C#的語言,其中類型查找(constructor屬性)總是會產(chǎn)生最特定的類型,而不是原型鏈中更高的泛型對象的類型。

我的建議是:不要過多地考慮JavaScript中的“繼承”。接口和混合的概念更有意義。也不要檢查對象的類型。檢查所需的屬性(“如果它像鴨子一樣走路,像鴨子一樣嘎嘎叫,那就是鴨子”)。

試圖將JavaScript強制進入一個經(jīng)典的繼承模型,而它所擁有的只是上面描述的原型機制,這就是造成混亂的原因。建議手動設置constructor-財產(chǎn)可能就是這樣做的。抽象是可以的,但是構造函數(shù)屬性的手動分配并不是JavaScript的慣用用法。


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 406 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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