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就是将最初的this
从Lint.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); }