Как обеспечить выполнение экземпляра объекта функции для обратного вызова в 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".