在一些情况下,this值可能不是我们所期待的值。如下面例子
1.window.identity = "Hello Worde!"
2.Let object = {
3. identity: 'My object',
4. getIdentity () {
5. return this.identity;
6. }
7.}
getIdentity ()方法就是返回this.identity的值。下面来看调用:
1.object.getIdentity(); //'My object'
2.(object.getIdentity)(); //'My object'
3.(object.getIdentity = object.getIdentity) (); //'Hello Worde!'
第一行的调用是正常调用,会返回“My object”,因为this.getIdentity就是this.getIdentity
第二行在调用时把object.getIdentity放在括号里。虽然加了括号之后看起来是对一个函数的引用,但this值并没有变。这是按照规范,object.getIdentity和(object.getIdentity)是相等的。
第三行执行了一次赋值,然后在调用赋值后的结果。因为赋值表达式是函数本身,this值不在与任何对象绑定,所以返回的是“Hello Worde!”。
一般情况下,不大可能像第二行和第三行这样调用对象上的方法。但通过这个例子,我们可以知道,即使语法稍有不同,也可能影响this的值。