困惑为什么这个javascript导致我的问题.定义了类和原型方法

Confused why this javascript is causing me issues. Defined a class and prototype methods

本文关键字:定义 问题 方法 原型 我的 为什么 javascript      更新时间:2023-09-26

我有以下内容,这是我的简化版本:

function MyClass(a,b) {
  this.a = a;
  this.b = b;
}
MyClass.prototype.f1 = function(a) {
    this.a = a;
};
MyClass.prototype.f2 = function(a) {
    this.f1(a);
};
var mc1 = new MyClass(1,2);

现在我得到一个错误说:

this.f1 is undefined

如果我把f1移到它自己的函数中,错误就消失了

是什么导致了这个问题?我知道如果你运行上面的简化版本应该工作,但是什么可能导致我的代码库中的问题?(我不能把它贴在这里,但是有什么提示吗?)

更新

Ok在firebug中跟踪它后,似乎关键字'this'已以某种方式反弹,它不再绑定到类MyClass,悬停在它上面显示'函数'。

发生的事情是,我设置这个函数MyClass。. f2作为Telerik编辑器的回调,它不知何故改变了'this'的作用域。

我有什么办法来解决这个问题?

一个选择是重构你的代码到一个避免使用prototype属性的版本:

function MyClass(a, b) {
    var t = this;
    t.f1 = function(a) {
        t.a = a;
    };
    t.f2 = function(a) {
        t.f1(a);
    };
    // constructor code...
    t.a = a;
    t.b = b;
}

这样您就有了一个对当前实例的持久引用,您可以使用它来代替this关键字。

正如你所说的一切看起来都很好。有几种可能性

1)你定义了MyClass的"子类",没有正确地连接原型/构造器。
2)你可能已经改变了MyClass对象(即类)的定义在运行时,所以它不会工作后的某一点(yay动态语言)
3)您试图从非MyClass实例调用f1

没有看到引起问题的调用,以及周围的代码,我不能再说了。