首页 > web前端 > js教程 > 正文

如何在 JavaScript 回调中正确访问'this”?

Patricia Arquette
发布: 2024-11-07 19:19:02
原创
596 人浏览过

How Can I Access

JavaScript 回调中的这种关联性

在 JavaScript 中,利用事件处理程序回调中的实例方法可以改变“this”的预期范围调用回调的源的实例。因此,经常使用类似于以下示例的代码:

function MyObject() {
  this.doSomething = function() {
    ...
  }

  var self = this
  $('#foobar').bind('click', function(){
    self.doSomethng()
    // this.doSomething() would not work here
  })
}
登录后复制

虽然功能强大,但这种方法可能看起来很奇怪。有没有更优化的解决方案?

理解闭包和“this”亲和性

这个问题超越了 jQuery,源于 JavaScript 对“this”和闭包的处理。闭包允许嵌套函数访问封闭函数中定义的变量,如下所示:

var abc = 1; // we want to use this variable in embedded functions

function xyz(){
  console.log(abc); // it is available here!
  function qwe(){
    console.log(abc); // it is available here too!
  }
  ...
};
登录后复制

“但是,”行为不同。与在特定范围内保持不变的普通变量不同,“this”可以在不同范围内动态变化。

// we want to use "this" variable in embedded functions

function xyz(){
  // "this" is different here!
  console.log(this); // not what we wanted!
  function qwe(){
    // "this" is different here too!
    console.log(this); // not what we wanted!
  }
  ...
};
登录后复制

解决方案:给“this”起别名

来规避这个问题挑战,JavaScript 允许我们将“this”分配给一个变量,本质上是给它起别名。这使我们能够在整个嵌套函数中引用预期对象。

var abc = this; // we want to use this variable in embedded functions

function xyz(){
  // "this" is different here! --- but we don't care!
  console.log(abc); // now it is the right object!
  function qwe(){
    // "this" is different here too! --- but we don't care!
    console.log(abc); // it is the right object here too!
  }
  ...
};
登录后复制

同样的原则也适用于其他伪变量,例如“参数”。

以上是如何在 JavaScript 回调中正确访问'this”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!