我想知道是否有可能从类或函数的实例中构造属性/方法,同时保持跨结构变量的范围?例如:
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}
因为它为每个变量创建了一个新实例和新范围。
答案 0 :(得分:3)
在你的例子中,解构desugars到类似
的东西const state = counter.state;
为counter.state
分配新值不会神奇地更新state
的值。解构并没有改变它。