Как обеспечить выполнение экземпляра объекта функции для обратного вызова в JavaScript

У меня есть объект пространства имен, для которого я определил некоторые функции. Одна из функций используется для создания сеанса веб-сокета с удаленным сервером.

ns.Session = function(url, config, callback){
   var ws = new WebSocket(url);
   ws.onmessage = function (e){
       if(login(e.data)){
           // This is the point at which I need to pass back the session object to callback
           callback(session):
       }
   }
   ....
}

В JavaScript, насколько я знаю, если кто-то вызывает эту функцию с помощью ns.Session(....) тогда this объект будет нс. Итак, как мне получить экземпляр "сеанса" для отправки обратного вызова.
arguments.callee насколько я знаю, не рекомендуется.

Вся причина, по которой я делаю это таким образом, заключается в том, что сеанс не считается "пригодным для использования" до тех пор, пока сервер не подтвердит вход в систему, поэтому я не хочу преждевременно возвращать объект функции до его фактического подключения и входа в систему. Следовательно, использование обратного вызова. Если есть лучший способ добиться этого, я тоже открыт для этого.

Сессия имеет множество других внутренних функций, таких как addHandler, sendData и т.д., которые я не показал здесь для краткости.

1 ответ

Решение

Вы можете использовать указатель для работы следующим образом:

ns.Session = function session(...) {
    // 'session' here points to your function, so you do
    callback(session); // like you wrote
    callback(ns.Session); // same effect if you don't change ns and ns.Session pointers
}

Кроме того, я не понимаю, почему вы используете слово "экземпляр" в этом случае, потому что функции имеют только один экземпляр. Если вы вызываете его с ключевым словом "new", функция создает новый объект из функции, и теперь вы можете использовать слово "instance".

Другие вопросы по тегам