Node.js原型inheritance

尝试用Javascript进行原型包装,特别是Node.js,并进行简单的testing。

function Lint() { this.input = 'foo'; events.EventEmitter.call(this); } Lint.prototype.dirs = function (dirs) { _.each(dirs, this.files); } Lint.prototype.files = function (dir) { console.log(this.input); // trying to get 'foo', returns undefined } var lint = new Lint(); lint.dirs(['js', 'js/views']); 

Lint.prototype.files日志未定义,因为this不是指Lint的实例。 我在这里错过了什么?

我能想到的唯一解决scheme就是将最初的thisLint.prototype.dirs给其他函数。 我很确定有一个更好的方法。

this是指lint对象,但是您不会将Lint对象传递给_.each 。 你是从对象分离函数并传递它。

您可以使用Function.prototype.bind将函数的上下文绑定到所需的值…

 _.each(dirs, this.files.bind(this)); 

或者,你可以保持对this值的引用,并传递一个匿名函数_.each

 var this_lint = this; _.each(dirs, function(v) { this_lint.files(v); }