节点.js原型继承

Node.js prototypal inheritance

本文关键字:继承 原型 js 节点      更新时间:2023-09-26

试图通过一个简单的测试来理解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传递到另一个函数。我很确定有更好的方法。

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);
}