javascript - Node.js 原型(prototype)继承

标签 javascript node.js prototype

尝试通过一个简单的测试来了解 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/

相关文章:

javascript - 将 javascript 中数字之间所有出现的 "-"替换为 ":"

node.js 和 expressjs 渲染带有 URL 参数的模板

node.js - o使用 Nodejs、jaydata 和 MongoDB 的数据服务器

JavaScript 多命名空间

prototype - 示踪子弹与原型(prototype)

javascript - 正则表达式从前 3 个字母识别月份

javascript - 删除元素时动画列表项?

javascript - 在 javascript/node.js 中重现 MongoDB 的映射/发出功能(不使用 MongoDB)

javascript - jQuery 是否保证与数组或对象的扩展原型(prototype)兼容?

javascript - 加载动态数组中的最终图像后如何调用函数?