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()
    将导致
    引用
    未定义的
    (严格模式)或全局对象(非严格模式)
这与ES6无关


有关
的更多信息:.

可能是因为
发出
方法依赖于引用特定值的
this
的值取决于函数的调用方式(如果它是未绑定的非箭头函数),并且您以两种不同的方式调用函数:

  • emitter.emit()
  • emit()
    将导致
    引用
    未定义的
    (严格模式)或全局对象(非严格模式)
这与ES6无关


有关此
的更多信息:。

听起来不错。上面所示的分解结构有任何修改吗?我唯一想到的是
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