Ecmascript 6 Javascript-解构对象-';这';设置为全局或未定义,而不是对象

Ecmascript 6 Javascript-解构对象-';这';设置为全局或未定义,而不是对象,ecmascript-6,this,destructuring,Ecmascript 6,This,Destructuring,我有一个具有两个函数的对象,foo和bar条形图调用foo。 通常,当bar使用this.foo()时,这可以正常工作。但是,在分解对象时,此不再引用对象。在下面的代码段中,它是未定义的。当我在chrome中运行它时,它指的是窗口对象 预期产量 func1() foo objectValue foo bar func2() foo objectValue foo bar 实际产量 func1() foo objectValue foo bar func2() foo globalValue

我有一个具有两个函数的对象,
foo
bar
<代码>条形图调用
foo
。 通常,当
bar
使用
this.foo()
时,这可以正常工作。但是,在分解对象时,
不再引用对象。在下面的代码段中,它是未定义的。当我在chrome中运行它时,它指的是
窗口
对象

预期产量

func1()
foo
objectValue
foo
bar

func2()
foo
objectValue
foo
bar
实际产量

func1()
foo
objectValue
foo
bar

func2()
foo
globalValue (or Uncaught TypeError, in the case of the code snippet, which breaks here)
Uncaught TypeError: this.foo is not a function (in the case of chrome, which breaks here)
*注意:要在chrome中复制,请将
let val='globalValue'
更改为
val='globalValue'

let val='globalValue'
let函数={
val:'对象值',
foo:function(){
console.log('foo')
},
bar:function(){
console.log('this.val:'+this.val)
this.foo()
console.log('bar'))
}
}
班级{
职能1(职能){
console.log('func1()')
functions.foo()
函数
}
func2({foo,bar}){
console.log('func2()')
foo()
bar()
}
}
让实例=新类()
instance.func1(函数)
console.log('\n')

func2(函数)
解构与将属性指定给局部变量相同。也就是说,在你的情况下,它将与

var foo = functions.foo;
var bar = functions.bar;
函数不绑定到其“父”对象。此所指的内容取决于函数的调用方式
foo()
函数。foo()
是调用函数的两种不同方式,因此
在每种情况下都有不同的值

这对于ES6或解构来说并不是什么新鲜事,JavaScript一直都是这样工作的


看。

嗯,是吗?不要对需要调用对象的方法进行分解。你要什么?