我有一个包含两个函数foo
和bar
的对象。 bar
来电foo
。
通常情况下,bar
使用this.foo()
时效果正常。但是,在对对象进行解构时,this
不再引用该对象。在下面的代码片段中,它是未定义的。当我在chrome中运行它时,它引用window
对象。
预期输出
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 functions = {
val : 'objectValue',
foo : function(){
console.log('foo')
},
bar : function(){
console.log('this.val: ' + this.val)
this.foo()
console.log('bar')
}
}
class Class {
func1(functions){
console.log('func1()')
functions.foo()
functions.bar()
}
func2({foo, bar}){
console.log('func2()')
foo()
bar()
}
}
let instance = new Class()
instance.func1(functions)
console.log('\n')
instance.func2(functions)

答案 0 :(得分:1)
解构与将属性分配给局部变量相同。即在你的情况下,它将与
相同this
函数不会绑定到他们的父母"宾语。 foo()
引用的内容取决于函数的调用方式。 functions.foo()
和this
是调用函数的两种不同方式,因此# get locations of ones
ones <- which(dummies == 1)
# get adjacent locations
news <- ones + c(1L, -1L)[(ones %% 2 == 0L) + 1L]
# fill out matrix
dummiesDone <- dummies * 0.5
dummiesDone[news] <- -0.5
dummiesDone
a b c d e f
[1,] 0.0 0.0 -0.5 0.0 0.5 0.0
[2,] 0.0 0.0 0.5 0.0 -0.5 0.0
[3,] 0.5 0.0 0.0 0.0 0.0 -0.5
[4,] -0.5 0.0 0.0 0.0 0.0 0.5
[5,] 0.0 0.5 0.0 -0.5 0.0 0.0
[6,] 0.0 -0.5 0.0 0.5 0.0 0.0
在每种情况下都有不同的值。
这对ES6或解构来说并不新鲜,JavaScript一直都是这样的。