Javascript ES6:从类/函数中解构方法?
我想知道是否可以从类或函数的实例中解构属性/方法,同时保持跨解构变量的范围?例如:Javascript ES6:从类/函数中解构方法?,javascript,ecmascript-6,Javascript,Ecmascript 6,我想知道是否可以从类或函数的实例中解构属性/方法,同时保持跨解构变量的范围?例如: function Counter() { this.state = {count: 0} this.update = (fragment) => { this.state = Object.assign({}, this.state, fragment) } this.increment = () => { this.update({count: this.state.
function Counter() {
this.state = {count: 0}
this.update = (fragment) => {
this.state = Object.assign({}, this.state, fragment)
}
this.increment = () => {
this.update({count: this.state.count + 1})
}
this.decrement = () => {
this.update({count: this.state.count - 1})
}
}
const counter = new Counter
const {
state,
increment,
decrement
} = counter
console.log(state)
increment()
console.log(state)
decrement ()
console.log(state)
每个console.log的结果都是相同的:{count:0}
,因为它正在为每个变量创建新实例和新范围
这是故意的吗?我是不是走错了路?(我正在创建一个库,我假设有人会尝试以这种方式使用它,所以我想让它工作起来)在您的示例中,将desugars分解为
const state = counter.state;
将新值分配给
计数器。状态
不会神奇地更新状态
的值。解构不会改变这一点。在您的示例中,将desugars解构为
const state = counter.state;
将新值分配给
计数器。状态
不会神奇地更新状态
的值。解构不会改变这一点。它按预期工作。“我想有人会尝试这样使用它,所以我想让它工作”——你最好不要这样。实际上,这是一个关于JS“基本”行为的非常好的问题+1它按预期工作。“我想有人会尝试这样使用它,所以我想让它工作”——你最好不要这样。实际上,这是一个关于JS“基本”行为的非常好的问题+1.