困惑为什么这个javascript导致我的问题.定义了类和原型方法
Confused why this javascript is causing me issues. Defined a class and prototype methods
我有以下内容,这是我的简化版本:
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
。
没有看到引起问题的调用,以及周围的代码,我不能再说了。
相关文章:
- 如何消除代码中的未定义和其他问题
- 组件生命周期问题/无法处理未定义的问题
- 自定义滑块问题
- 自定义Jquery css下拉菜单问题
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- JavaScript/jQuery JSON数组问题-值为未定义
- 谷歌地图自定义标记问题
- 在javascript中调用自定义谷歌搜索标签时出现问题
- 使用Breeze脱机数据时出现未定义的问题不是函数
- 从谷歌地图自定义控件打开离子模态时遇到问题
- 数据表 b可排序列定义问题
- JS Revearing Pattern事件未定义问题
- backbone.js模块定义问题
- 未捕获引用错误:未定义问题
- Javascript未定义问题
- IE8中控制台未定义问题
- JavaScript全局变量未定义问题
- 对象未定义问题
- 使用Google' Javascript API的未定义问题
- JS对象未定义问题