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

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

如何在ES2015中將所有屬性分解為當前作用域/封閉關系?

如何在ES2015中將所有屬性分解為當前作用域/封閉關系?

慕工程0101907 2019-12-06 11:08:22
我想做這樣的事情:const vegetableColors = {corn: 'yellow', peas: 'green'};const {*} = vegetableColors;console.log(corn);// yellowconsole.log(peas);// green我似乎無法找到或弄清楚該怎么做,但我真的以為我以前看過它?。篜注:我使用的是巴貝爾與stage設置為0;語境:我試圖在JSX中變得更干燥,而不是引用this.state或this.props無處不在。而且,如果數據發生更改,也不必繼續添加屬性以進行解構。
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

我認為您正在尋找該with聲明,它完全符合您的要求:


const vegetableColors = {corn: 'yellow', peas: 'green'};

with (vegetableColors) {

    console.log(corn);// yellow

    console.log(peas);// green

}

但是,有充分的理由不建議使用(在嚴格模式下,其中包括ES6模塊)。


將所有屬性分解為當前范圍


您無法在ES6 1中使用。那是一件好事。明確說明要引入的變量:


const {corn, peas} = vegetableColors;

另外,您可以使用擴展全局對象Object.assign(global, vegetableColors)以將它們置于全局范圍內,但實際上,這比with聲明要糟糕。


1:…雖然我不知道ES7中是否有允許這種事情的草案,但我可以告訴您,任何提案都會被TC否決:-)


查看完整回答
反對 回復 2019-12-06
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

我認為您正在尋找:


const {corn, peas} = vegetableColors;

依靠Babel的REPL直播


如果Pointy是對的,那么您在不知道cornand 的名稱的情況下詢問如何執行此操作peas,則無法進行銷毀分配。


您只能使用循環在全局范圍內進行操作,但是我確定您不想在全局范圍內執行此操作。不過,以防萬一:


// I'm sure you don't really want this, just being thorough

Object.keys(vegetableColors).forEach((key) => {

    Object.defineProperty(this, key, {

        value: vegetableColors[key]

    });

});

(enumerable: true如果希望這些偽常量可枚舉,則在該處拋出。)


這在全局范圍內有效,因為this引用了全局對象。


查看完整回答
反對 回復 2019-12-06
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

我仍然認為這將是一個有用的功能,但是我可以看到論點的另一面。在任何情況下,with它都不是“解決方案”的imo,因為現在您必須包裝整個模塊with并添加級別縮進,這比在每個函數調用前添加對象名稱或在頂部使用名稱導入所有內容都更糟糕。破壞。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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