成员函数中的 Javascript `this` 对象 == `window`

标签 javascript

在我的一些 Javascript 对象中,我发现我的 this 指针是正确的 - 这些是 new Func() 类型的对象 - 在创建时,但在分配的方法中它可能是错误的。

function Confused() {
   console.log("checking",this==window,"is always false");
   this.method = function() {
       console.log("checking",this==window,"is true for some funcs but not others");
   };
};

在对 (new Confused()).method() 的一些调用中 - 它似乎丢失了它的 this 指针。这种情况发生的次数似乎取决于功能,而不是随机的;这是代码中有关我如何创建导致此问题的类的内容。

在线示例位于 http://williame.github.com/barebones.js/和成员(member)回调G3D._file_loaded有时调用时有错误的 this 指针。

为什么,我该如何解决?

最佳答案

在 Javascript 中有 4 种使用函数的方式 这些中的每一个所做的是改变 this 的内容:

  • 函数调用:this = 全局对象(浏览器中的窗口)
  • 方法调用:this = 调用它的对象。
  • 构造函数调用:this = 您正在创建的新对象。
  • 调用/应用调用:this = 你传递的对象。

在你的情况下 this == window 当你直接调用函数时 (Confused()) 但如果你调用使用 new (new Confused()) 那么它将是您正在创建的新对象。

关于成员函数中的 Javascript `this` 对象 == `window`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091173/

相关文章:

javascript - ChaiJS 应该 - 测试空字符串

javascript - 没有看到播种数据库后所需的 Sequelize 模型属性

JavaScript 相当于 PHP 的消亡

javascript - JQuery 进度条插件 - 100% 宽度

javascript - 从ajax请求获取数据到Angular

javascript - 我想在 jquery 对话框中从数据库获取 id

javascript - Myfunc=_emptyFunc 与 Myfunc=null

javascript - Google Analytics 是否允许向事件添加自定义跟踪 ID?

javascript - 使用 (flexlayout) 列时,div 大小不正确

javascript - 纯 Javascript - 单击按钮/输入键时将文本输入的值添加到 <li>