this在js代码中经常用到,但有时候也会出现引用错误的问题,以下是一些经常用到的情况:
1、在标准函数中,this引用的是把函数当成方法调用的上下文对象。以下是《JavaScript高级程序设计》中的例子。
结果是 18:red 20:blue 。第一个输出red,很容易理解,因为this指向window。而在把sayColor()赋值给o之后再调用o.sayColor(),this指向o,即this.color相当于o.color,所以会显示blue。
2、在箭头函数中,this引用的是定义箭头函数的上下文。这与标准函数是不同的。
结果是16:red 18:red。 因为箭头函数中的this会保留定义该函数时的上下文,箭头函数的函数名只是保存指针的变量。因此全局定义的sayColor()函数和o.sayColor()是同一个函数,只不过执行时的上下文不同。
3、闭包中使用this。如果内部函数没有使用箭头函数,则this对象会在运行时绑定到执行函数的上下文。
结果 The Window。首先,getIdentityFunc()方法返回的是一个匿名函数,这个匿名函数返回的是this.identity。所以obj.getIdentityFunc()()得到的就是this.identity。这里的关键问题是为什么匿名函数没有使用其包含作用域(getIdentityFunc())的this对象呢?因为每个函数在调用时都会自动创建this和arguments。内部函数永远不可能直接访问外部函数的这两个变量。但是,如果把this保存在闭包可以访问的另一个变量中,则是行得通的。
结果是 My Object。