有人知道“这件事”怎么了吗?
console.log('check 1', this) //{activateLasers: ƒ, …}
Object.keys(modelData).forEach(function(key, index1) {
console.log('check 2', this) //undefined
答案 0 :(得分:2)
此上下文在地图内部发生变化。
Array.prototype.map()使用第二个参数来设置其在映射函数中的引用。
您可以将其显式传递给map函数以保留上下文。
array.map(function(i) {
...
} , this)
以您的情况
array.forEach(function(key, i) {
....
}, this)
或者,您可以使用ES6箭头功能自动保留当前的此上下文
array.map((i) => {
...
})
答案 1 :(得分:-1)
似乎您是在严格模式下编写代码。 this
未定义,因为这是该语言的工作方式。
this
是一种语法结构。调用类或对象方法时,通常以类似于obj.method()
的方式进行操作。该语言使用.
和()
看到句法模式,并在this
内创建method
obj。如果您没有看到该模式(并且未使用=>
函数,则应该很好地提示它可能是undefined
或window
。