2013-07-25 5 views
0

Я отладка некоторых проблем я, имеющими на Socket.io и наткнулся accross этого (линии 345):вызова функции JS с кронштейнами

var current = this.manager.transports[this.id]; 

однако

typeof this.manager.transports = [Function] 

и заявление выглядит следующим образом (lib/manager.js линия 928):

Manager.prototype.transports = function (data) { 
    //some stuff, returns an array 
} 

Может кто-то объяснить, что это здесь? Не хватает ли скобок transports()[this.id]?

Спасибо!

UPDATE Вот код для функции

Manager.prototype.transports = function (data) { 
    var transp = this.get('transports') 
    , ret = []; 

    for (var i = 0, l = transp.length; i < l; i++) { 
    var transport = transp[i]; 

    if (transport) { 
     if (!transport.checkClient || transport.checkClient(data)) { 
     ret.push(transport); 
     } 
    } 
    } 

return ret; 
}; 
+1

Не видя больше кода, он неопределен. Даже если это функция, нет ничего неправильного в доступе к свойствам объекта (потому что запомнить, функции - объекты). Посмотрите внимательно на ** конец ** задания, где в вашем комментарии говорится: «возвращает массив». – Pointy

+0

@Pointy обновил мой ответ, чтобы показать код функции – scanales

+0

Так что это код в socket.io где-нибудь? Где код? Я не могу найти «transport.js» в текущем репозитории github (ну, по крайней мере, я нашел). – Pointy

ответ

0

Javascript функции в основном JavaScript объекты, поэтому, когда эта линия:

this.manager.transports[this.id] 

выполняется его в основном говорят, получить имущество в transports функция/объект, который имеет ключ this.id

вы можете проверить это на консоли, выполнив следующие действия:

function myFunction() { 
    alert("inside function"); 
} 
myFunction[3] = "Hi"; 
console.log(typeof(myFunction)); 
console.log(myFunction[3]); 
myFunction(); 
+0

Да, я получаю, что эти функции могут быть объектами, но также при выполнении 'console.log (this.manager.transports);' Единственное, что я получаю, это функция сам, а не какие-либо другие свойства, которые можно было добавить, а также после добавления некоторого «console.log» к рассматриваемой функции. Он запускается, когда он «вызывается» с помощью скобок, поэтому я немного потерян – scanales

Смежные вопросы