【问题标题】:Alternative to .on('error', this.onError.bind(this)) in ES6?ES6 中 .on('error', this.onError.bind(this)) 的替代方案?
【发布时间】:2015-12-24 04:40:30
【问题描述】:
function Person()
}

function Person.prototype.init() {   
  request('http://google.fr').on('error', this.onError.bind(this));
}

function Person.prototype.onError(error) {
  console.log(error);
}

bind.thisinit() 中是必需的。我在这里有什么 ECMAScript 6 替代方案来处理这个问题?这是唯一的解决方案吗,我似乎无法在此处应用箭头。

【问题讨论】:

  • 你能修复你的语法错误吗?您不能在函数标识符中使用点。
  • 你为什么要绑定这个方法呢?它在我看来相当静态。
  • @Bergi 剥离了我的示例,我的实际代码访问了 Person 的状态。

标签: javascript node.js binding ecmascript-6


【解决方案1】:

为了直接回答您的问题,ES6 没有提供任何我们可以用来避免在其调用点绑定onError 的额外功能。 ES6 并没有取消 JavaScript 执行上下文的行为。

附带说明,您声明实例方法的方式是非法的,并且会引发错误。它们应该声明如下:

Person.prototype.init = function () {   
    request('http://google.fr').on('error', this.onError.bind(this));
};

Person.prototype.onError = function (error) {
    console.log(error);
};

目前您的onError 方法如果未绑定传递将不会出现任何错误。这是因为您没有在 onError 方法的主体内使用 this

// Safe unbound method
Person.prototype.onError = function (error) {
    console.log(error);
};

// Unsafe unbound method
Person.prototype.onError = function (error) {
    console.log(this, error);
             // ^^^^
};

【讨论】:

    【解决方案2】:

    你可以使用fat arrow functions:

    request('http://google.fr').on('error', (error) => this.onError(error));
    

    【讨论】:

    • 不确定这是否是一种改进。
    猜你喜欢
    • 2017-05-13
    • 2019-05-07
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多