3 回答

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否決:-)

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引用了全局對象。

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