【问题标题】:How does 'this' works in javascript? [duplicate]'this' 在 javascript 中是如何工作的? [复制]
【发布时间】:2013-05-25 11:09:09
【问题描述】:

嗨,我对 this 在 javascript 中的工作原理有点困惑。基于此示例:

var myFunction = function(){
 function testMe(){
  console.log(this)  --------> DOMwindow
 }
 console.log(this) ---------> myFunction
}

var myvariable = new myFunction();

这里发生了什么?

【问题讨论】:

  • 您的testMe 从未被调用过?
  • 搜索是你的朋友。
  • 啊,谢谢我从 In Javascript 得到答案,为什么“this”运算符不一致?
  • @DeepakNair 很高兴您找到了答案。在发布问题之前,请先在 Google 和其他 Stack Overflow 上搜索答案。它有助于我们将网站的重点放在高质量的问题和答案上,而且如果您发布太多低质量的问题,您将获得自动问题禁令。

标签: javascript


【解决方案1】:

this 引用的值取决于具体情况。任何无范围(即不在对象中)的函数调用都将具有this = windowDOMWindow,如果您愿意)。任何属于原型的部分,或已使用 applybind 更改的任何内容都将使用 this 作为该对象(“它本身”,如果您愿意的话)。

所以,为了说明。当您使用 new 关键字进行实例化时,您的函数会自动继承 this 本身。当您在其中调用 IETF 时,此 IETF 中的this 将指向全局范围。

如果您想避免这种情况,您可以随时这样做:

var myFunction = function() {
    var testMe = function() {
        console.log(this);
    }
    testMe.bind(this);
}

反过来,thistestMe 中将按应有的方式使用该对象。

【讨论】:

  • “这个引用的值会根据实际发生的情况在每个函数调用中发生变化”。一点也不。 this 的值由调用设置,每次都可以是相同的值。也可以在 ES5 兼容的浏览器中使用 bind 将其设置为固定值。
  • @RobG:好的,我将把“这个引用的值取决于环境”编辑得更模糊。
  • "当你使用 new 关键字进行实例化时,你的函数会自动继承 this 作为它自己"。也不对。当一个函数作为构造函数被调用时,它的 this 引用了一个新构造的对象。您还忽略了 ES5 中的严格模式,其中 this 可以是 any 值,包括 undefined。
猜你喜欢
  • 2023-03-10
  • 2013-09-26
  • 2011-08-09
  • 2014-05-30
  • 2017-08-06
  • 2015-08-10
  • 2020-01-10
  • 2021-04-10
  • 2015-06-01
相关资源
最近更新 更多