this
在JavaScript中是如何工作的
下面代码的执行结果为:
var fullname = 'John Doe';var obj = { fullname: 'Colin Ihrig', prop: { fullname: 'Aurelio De Rosa', getFullname: function() { return this.fullname; } }}; console.log(obj.prop.getFullname()); var test = obj.prop.getFullname; console.log(test());
答案见底部
解答:
上面的代码打印结果依次为Aurelio De Rosa
和John Doe
。 原因在于this
指向的是函数的执行环境,this
取决于其被谁调用了,而不是被谁定义了。
对第一个console.log()
语句而言,getFullName()
是作为obj.prop
对象的一个方法被调用的,因此此时的执行环境应该是这个对象。另一方面,但getFullName()
被分配给test
变量时,此时的执行环境变成全局对象(window
),原因是test
是在全局作用域中定义的。因此,此时的this
指向的是全局作用域的fullname
变量,即John Doe
。