var name = "The window";var object = { name: "My Object", getName: function(){ console.log(this.name); }}object.getName(); // My Object (object.getName)(); // My Object (object.getName = object.getName)(); // The window
来分析下调用的结果:
第一行代码跟平常一样调用了object.getName()
返回了My Object
,因为this.name
就是object.name
。
第二行代码在调用这个方法之前给它加了一个括号。虽然加了一个括号后,就好像只是在引用一个函数,但是this的值得到了维持,因为object.getName
和(object.getName)
的定义是相同的。
第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以this的值不能得到维持,结果就返回了The window
。
当然你不大可能像第二行和第三行代码一样调用这个方法。这个例子只是说明了一个细微的语法变化,都有可能意外的改变this的值。