JSで無名関数を外に出すときに使えるbind関数
例えばnodeJSで書かれた以下のようなコードがあり、
start関数の引数に指定されている無名関数をonRequest()として外に定義したいとします。
var http = require('http');
var url = require('url');
var start = function(router) {
http.createServer(function(req,res) {
// routerにパスを渡す
var pathname = url.parse(req.url).pathname;
router.route(pathname)
res.writeHead(200, {"Content-Type": "text/plain"});
res.write("hey");
res.end();
}).listen(8888);
console.log('Server has started.');
};
exports.start = start;
無名関数にはrouterというオブジェクトを渡してあげないといけないけど、
reqやresという引数がすでにあるので onRequest(router) のような書き方では渡せません。
そこで、以下のようにbind関数を使うと引数を渡すことができます。
var http = require('http');
var url = require('url');
var onRequest = function(router,req,res) { // 引数としてrouterを前に追加する
// routerにパスを渡す
var pathname = url.parse(req.url).pathname;
router.route(pathname)
res.writeHead(200, {"Content-Type": "text/plain"});
res.write("hello");
res.end();
};
var start = function(router) {
http.createServer(onRequest.bind(this, router)).listen(8888); // 関数のbind関数を使用してrouterを渡す
console.log('Server has started.');
};
exports.start = start;