我有以下内容,这是我所拥有的简化版本:
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'的范围。
我可以选择解决此问题吗?
答案 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
。
没有看到导致问题的调用,以及周围的代码,我不能多说。