在我的一些 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/