我有以下代码:
var tradingInterface = function() {
this.json = '';
this.init = function() {
$.get( '/whatever',{}, function(data) {
this.json = data;
// Rebuilds Everything
this.rebuildAll();
});
};
this.rebuildAll = function() {
//whatever here
};
};
为什么我在init函数中遇到以下错误?
ReferenceError: this.rebuildAll is not defined
this.rebuildAll();
为什么我可以在没有范围问题的情况下访问this.json但不能访问this.rebuildAll?
我写了一个类似的前一个帖子,但我被重定向到How to access the correct `this` / context inside a callback?,但我无法使其正常工作。
正如线程所说,我尝试了:
var tradingInterface = function() {
this.json = '';
var self = this;
this.init = function() {
$.get( '/whatever',{}, function(data) {
this.json = data;
// Rebuilds Everything
self.rebuildAll();
});
};
this.rebuildAll = function() {
//whatever here
};
};
错误消失了,但rebuildAll函数没有做它应该做的......
我需要一些帮助...
此致
答案 0 :(得分:3)
错误消失了,但rebuildAll函数没有做它应该做的......
你没有解释rebuildAll
应该做什么,所以我只能假设问题是你没有替换
this.json = data;
带
self.json = data;
在$.get
回调中,this
指的是与self
不同的对象。这些都在question/answer you linked to中解释。
为什么我可以在没有范围问题的情况下访问this.json但不能访问this.rebuildAll?
您分配到this.json
。您(几乎)总是可以将属性分配给对象。但是,您正在阅读 this.rebuildAll
并尝试将其称为函数。由于this.rebuildAll
为undefined
,因此您无法调用它。
简化示例:
var obj = {};
obj.foo = 42; // works, foo didn't exist before
obj.bar = function() {}; // works, bar didn't exist before
obj.bar(); // works because bar exists
obj.baz(); // doesn't work, because baz doesn't exist