我正在查看 event.js 中 once() 的实现:
EventEmitter.prototype.once = function(type, listener) {
if ('function' !== typeof listener) {
throw new Error('.once only takes instances of Function');
}
var self = this;
function g() {
self.removeListener(type, g);
listener.apply(this, arguments);
};
g.listener = listener;
self.on(type, g);
return this;
};
记住你会做some_object.once('on', function(){ console.log(this); } );
临时函数 g() 具有self.removeListener(type,g)
. 我认为这是因为 g() 中的上下文否则会出错。但是,在那之后的行中,变量this
被用于listener.apply(this, arguments);
But... 这不是然后将全局上下文传递给listener(arguments)?
然后稍微向下,它会运行self.on
if this.on
。
现在......我很困惑。我对 Javascript 还很陌生,但我仍然对上下文感到困惑。但是,这段代码让我发疯了……有人可以请教我吗?
谢谢,
默克。