我正在尝试理解用于制作Node.js调度程序的一些代码,但我无法理解一行。也许是我的JavaScript差距。 。 。我怀疑地对代码进行了评论。
var HttpDispatcher = function() {
this.listeners = { get: [ ], post: [ ] };
}
HttpDispatcher.prototype.on = function(method, url, cb) {
this.listeners[method].push({
cb: cb,
url: url
});
}
HttpDispatcher.prototype.onGet = function(url, cb) {
this.on('get', url, cb);
}
HttpDispatcher.prototype.onPost = function(url, cb) {
this.on('post', url, cb);
}
HttpDispatcher.prototype.dispatch = function(req, res) {
var parsedUrl = require('url').parse(req.url, true);
var method = req.method.toLowerCase();
this.listener[method][parsedUrl.pathname](req, res); // i don't understand this line
}
为什么我们将this.listener
称为二维数组?我们将侦听器定义为一个对象数组!为什么我们传递参数?
答案 0 :(得分:1)
它不是一个二维数组,它的bracket notation用于访问对象的嵌套属性。
this.listener[method][parsedUrl.pathname](req, res)
|-------------------||------------------||--------|
^object property of ^nested function ^ invocation of the function
the listener object of the listener
where the property object where the
key is the method property key is
the path name
可以通过将点和/或括号引用链接在一起来访问嵌套对象的属性。以下都是等效的:
object.baz.foo.bar;
object["baz"]["foo"]["bar"];
object["baz"].foo["bar"];
查看this了解详情。