【发布时间】:2015-12-06 10:36:55
【问题描述】:
我有一个带有单个方法 exec(arg1,..,argn) 的简单类,并且我想要一些别名方法,它们使用预定义的参数值(例如 exec_sync = exec.bind(this, true))调用 exec。
以下方法可以解决问题:
class Executor {
constructor() {
this.exec_sync = this.exec.bind(this, true);
}
exec(sync, cmd, args/* ... */) {
// impl
}
}
但是我不知道这是否是个好主意,或者这是否符合 ES6 的习惯。
更新日期:
在一个真实的例子中,我有两个嵌套循环,分别有 3 个和 4 个循环,用于向类动态添加总共 12 个别名方法。当您实际上可以利用 JS 作为基于原型的编程语言时,显式定义别名方法将是一项繁琐的任务。
更新 2 - 示例:
假设我们有一个简单的 HTTP 客户端,其方法为 request(method, body),我们想为 GET、PUT 等提供别名方法。它看起来如下所示:
class HTTP {
constructor() {
['GET', 'PUT', 'POST', 'DEL'].forEach((method) => {
this[method] = this.request.bind(this, method);
}, this);
}
request(method, body) {
// execute the HTTP request
}
}
【问题讨论】:
-
为什么不显式地创建多个函数?
exec_sync(...args) { return this.exec(true, ...args); } -
@zerkms 我认为这会更清楚类的作用。我只是对做类似事情的可能性感兴趣。
-
ES6 类只是语法糖。在运行时向对象添加属性方面没有任何改变。
标签: javascript ecmascript-6 idioms