我在使用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/

10-11 18:40