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

时间:2011-09-14 16:35:10

标签: javascript

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

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移到自己的函数中,则会出现错误。

可能导致此问题的原因是什么? 我知道如果你运行上面的简化版本它应该工作,但是什么可能导致我的代码库中的问题? (我不能在这里发布,但有什么提示要找什么?)

更新

在使用firebug进行跟踪之后,似乎关键字“this”已经以某种方式反弹并且不再绑定到MyClass类,将鼠标悬停在它上面显示“函数”。

发生的事情是我将此函数MyClass.f2设置为Telerik编辑器的回调,它以某种方式改变了'this'的范围。

我可以选择解决此问题吗?

2 个答案:

答案 0 :(得分:2)

一种选择是将代码重构为避免使用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 :(得分:0)

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

1)您定义了MyClass的'子类',并没有正确连接原型/构造函数。
2)您可能在运行时更改了MyClass对象(即类)的定义,因此在某个点(yay动态语言)之后它不起作用 3)您试图从不是f1实例的内容中调用MyClass

没有看到导致问题的调用,以及周围的代码,我不能多说。