尝试通过一个简单的测试来了解 Javascript 中的原型(prototype),特别是 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 的实例。我在这里缺少什么?
我能想到的唯一可行的解决方案是将 Lint.prototype.dirs
中的初始 this
传递给其他函数。我很确定有更好的方法。
最佳答案
this
指的是 lint
对象,但您没有将 Lint
对象传递给 _.each
。您正在从对象中分离函数并将其传递。
您可以使用 Function.prototype.bind
将函数的上下文绑定(bind)到所需的值...
_.each(dirs, this.files.bind(this));
或者,您可以保留对 this
值的引用,并将匿名函数传递给 _.each
...
var this_lint = this;
_.each(dirs, function(v) {
this_lint.files(v);
}
关于javascript - Node.js 原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154194/