关于javascript中this关键字(翻译+自我理解)(2)


<element>
function test () {
this.title = 'me';
}


这也是对象冒充最典型的方式。

  【自由变量问题】
  写了这么长,我们还是回到最开始的那个问题:

复制代码 代码如下:


var name = 'hong'
var obj = {
name: 'ru',
getName: function(){
return function(){
return this.name;
};
}
}
alert(obj.getName()());


为什么这种方式得到的结果会是:hong 呢?重点在

复制代码 代码如下:


return function(){
return this.name;
};


对比一下上面写的函数refer的例子,不难发现,返回的这个匿名函数的调用方式和onclick = function () {doSomething()} 如出一辙。所以这种方式并不会改变这个function的拥有者,它虽然是个嵌套函数,但是它的声明却是顶级的。其中的this指向的是window。
  而第二种方式是强制在getName()中把this赋给了that,也就是说,that.name其实和getName()中的this.name是一样的。而在getName的上下文中,它的拥有者是obj这个对象,所以this会指向obj,故this.name === obj.name;
  绕了这么一大圈不知道有没有把各位绕明白。

  其实可以这样总结:在this所在的函数上下文中,如果这个函数不是以“方法”的形式被调用的话,那么这个this会指向window对象,否则会指向这个函数的拥有者。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdxwdy.html