JS-Neuling, wenn Sie auf Probleme stoßen, schreiben Sie bitte zuerst den Code
var name = "John";
var myObject = function() {
return {
getName: function() {
return this.name;
}
}
}();
alert(myObject.getName());
Das Ausgabeergebnis ist undefiniert
Meine Fragen sind 1. return
里面的getName
的function
是不是匿名函数 我现在理解的是匿名函数 那么这个this
应该就是指向全局吧?就是window
那为啥不输出john
2.让我更困惑的是,我在调试时候一步步走,走到this.name
的时候,this
指向的是Object
而当输出完undefined
的时候,我在监视那里的this
变成了window
,this.name
也变成了john
Ich verstehe es nicht ganz, bitte helfen Sie mir!
这个问题需要一步一步看,首先是myObject是一个对象,上面有个属性是getName,值是一个匿名函数,
alert(myObject.getName());
,就是这个对象在调用这个方法,所有这个时候的this就是undefined。再次做下扩展,看下面的代码
object.getName()方法返回的是一个匿名函数,执行环境是全局作用域,this的指向基于函数的执行作用域所以是window,这个时候window.name是John。
如果我们想返回lucy,就需要通过创建一个箭头函数或者闭包来实现。
箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
至于你说的调试this指向改变问题,是因为匿名函数原本的作用域是window,但当执行的时候是myObject调用了它,所以this在那一刻指向了myObject。
getName
的this
指的是myObject
,因为getName
直接是myObject
所调用的,所以这里的 this 指的是 ————调用函数的那个对象
myObject.getName()
通常情况下谁调用了某个函数,这个函数中的this就指向谁啦