我在使用oo JavaScript时遇到了一些麻烦。我正在创建一个新的对象public和private方法。现在,当我调用public方法时,它无法访问私有变量。
我相信我应该return
公开方法(互联网),但真的不知道为什么。
有人可以解释我所缺少的吗?
function something(){
var somePanel; // it is a jquery object to a div
var createWindow = function(data){
random.xhr('/chat', 'GET', null, function(res){
var Container = $("#Container");
somePanel = $("<div/>").addClass('somePanel').append(res);
Container.append(somePanel.hide());
});
};
this.activate = function(){
somePanel.show().siblings().hide();
};
this.init = function(data, fn){
createWindow(data);
};
};
connections[data] = new something(); // creates a new something object
connections[data].init(data); // which creates just a div object, actually
connections[data].activate(); // has code to show this panel and hide every other panel
当我调用
activate()
方法时,它找不到somePanel
。我应该怎么做?又为什么呢? 最佳答案
异步方法的经典问题。
您是xhr处理程序,当您运行activate
时不会被调用。您需要等待xhr处理程序运行,然后在回调中调用activate
。
遵循以下原则:
// ...
this.init = function(data, fn){
createWindow(data, fn);
};
var createWindow = function(data, fn) {
random.xhr('/chat', 'GET', null, function(res){
var Container = $("#Container");
somePanel = $("<div/>").addClass('somePanel').append(res);
Container.append(somePanel.hide());
fn();
});
};
// ...
connections[data] = new something();
connections[data].init(data, function () { connections[data].activate() });
关于javascript - Java OOP原理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19609829/