2016-11-07 3 views
0

Когда вы связываете метод в javascript, он вызывает вызов на начальном объекте? Или объект возврата предыдущего метода?Цепочка метода Javascript в NODEJS

Я спрашиваю об этом, потому что в узле я цепляю .listen().

Он работает:

var http = require("http"); 

http.createServer(function (request, response) { 
    response.writeHead(200, { 
    'Content-Type': 'text/plain' 
    }); 
    response.end('Hello World\n'); 
}).listen(8088); 

// Console will print the message 
console.log('Server running at http://127.0.0.1:8081/'); 

Это не работает, когда listen() вызывается после createServer:

http.createServer(function (request, response) { 
    response.writeHead(200, { 
    'Content-Type': 'text/plain' 
    }); 
    response.end('Hello World\n'); 
}) 

http.listen(8088); 

Он говорит, что listen() не функция. Почему это работает, когда я его цепляю?

+2

Он вызывается на возвращаемое значение – Tibrogargan

ответ

2

Поскольку http является модулем, который отличается от экземпляра http.Server, созданного createServer. См. Документацию here и попробуйте console.log() переменные, чтобы увидеть, какие функции и свойства определены на них.

0

Свободные интерфейсы работают, возвращая тот же объект, на который вы вызвали (путем завершения метода с помощью return this), чтобы вы могли связывать вызовы с этим объектом (следовательно, сделать его «свободным»).

https://en.wikipedia.org/wiki/Fluent_interface

В вашем случае, это не вопрос метода построения цепочки. Вызов http.createServer возвращает новый объект, отличный от http, на который вы можете вызвать прослушивание.

0

Это происходит потому, что createServer возвращает новый экземпляр http.Server.

Class: http.Server 

Этот класс наследует от net.Server и имеет событие 'слушает'. More information

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