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.filesthisLint のインスタンスを参照していないため、ログは未定義です。ここで何が欠けていますか?

私が考えることができる唯一の解決策は、最初のthisfromLint.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 に答える