亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

匿名類實例-這是個壞主意嗎?

匿名類實例-這是個壞主意嗎?

Helenr 2019-11-02 13:30:33
在ES6中,我們可以做匿名類:var entity = class {}但是我們也可以實例化它:var entity = new class {    constructor(name) { this.name = name; }    getName() { return this.name; }}('Foo');console.log(entity.getName()); // Foo它背后的工作是什么,它將帶來什么優勢以及它也會帶來什么警告?
查看完整描述

3 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

如果您確切地知道自己在做什么,并且正在精心設計的元編程系統中創建類的層次結構(即您想要復制的事物),那么就可能需要匿名類,并且沒有其他優雅的擴展解決方案,例如


{

    myImplementation: class extends MyBaseClass {

        someMethod(x) {

            super().someMethod(x);

            insert extended behavior

        }

    }

}

當然,您可以使用一些濫用魔術功能來實現上述功能Object.assign:


{

    myImplementation: extendMagic(mySuper => ({

        someMethod(x) {

            mySuper.someMethod(x);

            insert extended behavior

        }

    }))

}

或找到一些更好的方式來做自己在做的事情。但是人為的用例偶爾會(盡管很少)存在。


用例從來都不是很好,但是當您需要難以通過原型繼承編寫的Class功能時,這些用例最引人注目(當然,由于Class是圍繞原型繼承的包裝器,因此您的使用案例歸結為想要語法糖加es6 +類的功能...是否需要構造函數,super和extends和staticmethod等...?是否堅持使用已經存在的類,還是可以使用Objects和asserts編寫所有內容?是匿名的?這些問題可以幫助你決定)。


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

TA貢獻1843條經驗 獲得超7個贊

讀者應注意以下引號:“這種書寫方式會導致每次對表達式求值時都會創建一個新的構造函數和原型對象。如果使用這種方法創建多個對象,它們將不會獲得類/原型的任何好處?!?nbsp;-除非我誤解了,否則這是為每個對象創建一個匿名類的有效反對,但不一定是使用匿名類創建多個對象的反對,在這種情況下,它們仍將受益于原型繼承。(其他反對意見可能存在,也可能不存在。)

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號