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

时间:2017-01-12 00:52:28

标签: ecmascript-6 this destructuring

我有一个包含两个函数foobar的对象。 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)




1 个答案:

答案 0 :(得分:1)

解构与将属性分配给局部变量相同。即在你的情况下,它将与

相同
this

函数不会绑定到他们的父母&#34;宾语。 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一直都是这样的。

请参阅How does the "this" keyword work?