Javascript 方法解构不起作用
试图确定为什么它不能正常工作Javascript 方法解构不起作用,javascript,ecmascript-6,Javascript,Ecmascript 6,试图确定为什么它不能正常工作 // assuming this works const { emitter } = window.project; emitter.emit('foo'); // why doesnt this const { emitter: { emit } } = window.project; emit('foo'); 大概是因为emit方法依赖于this引用特定值。this的值取决于函数的调用方式(如果它是未绑定的非箭头函数),并且您以两种不同的方式调用函数: e
// assuming this works
const { emitter } = window.project;
emitter.emit('foo');
// why doesnt this
const { emitter: { emit } } = window.project;
emit('foo');
大概是因为
emit
方法依赖于this
引用特定值。this
的值取决于函数的调用方式(如果它是未绑定的非箭头函数),并且您以两种不同的方式调用函数:
emitter.emit()
将导致emit()
引用此
(严格模式)或全局对象(非严格模式)未定义的
有关
此
的更多信息:.可能是因为发出
方法依赖于引用特定值的此
。this
的值取决于函数的调用方式(如果它是未绑定的非箭头函数),并且您以两种不同的方式调用函数:
emitter.emit()
将导致emit()
引用此
(严格模式)或全局对象(非严格模式)未定义的
有关此的更多信息:。听起来不错。上面所示的分解结构有任何修改吗?我唯一想到的是
const{emitter}=window.project;常量emit=emitter.emit.bind(发射器)代码>,这只是通常的绑定。或者let{emitter,emitter:{emit}}=window.project;emit=emit.bind(发射器)代码>,但我觉得这有点奇怪。当然,如果您可以控制发射器的代码,您可以将emit
方法绑定到那里,在这种情况下,您的destructuring语句就可以工作了。有趣的是,destructure没有维护BID关系。非常感谢!解构实际上只是属性/数组访问的语法糖,即var emit=window.property.emitter.emit代码>。听起来不错。上面所示的分解结构有任何修改吗?我唯一想到的是const{emitter}=window.project;常量emit=emitter.emit.bind(发射器)代码>,这只是通常的绑定。或者let{emitter,emitter:{emit}}=window.project;emit=emit.bind(发射器)代码>,但我觉得这有点奇怪。当然,如果您可以控制发射器的代码,您可以将emit
方法绑定到那里,在这种情况下,您的destructuring语句就可以工作了。有趣的是,destructure没有维护BID关系。非常感谢!解构实际上只是属性/数组访问的语法糖,即var emit=window.property.emitter.emit代码>。