1

试图通过一个简单的测试来围绕 Javascript 中的原型,特别是 Node.js。

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 的实例。我在这里想念什么?

我能想到的唯一可行的解​​决方案是将初始值传递thisLint.prototype.dirs其他函数。我很确定有更好的方法。

4

1 回答 1

4

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);
}
于 2012-04-14T13:58:13.130 回答