node.js括号语法

时间:2015-08-17 23:24:31

标签: javascript node.js

我正在尝试理解用于制作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称为二维数组?我们将侦听器定义为一个对象数组!为什么我们传递参数?

1 个答案:

答案 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了解详情。