使用不同的名称向Javascript类添加相同的函数两次
我想用两个不同的函数名向Javascript类添加两次相同的函数 到目前为止,我已经提出了两种实现方法使用不同的名称向Javascript类添加相同的函数两次,javascript,ecmascript-6,Javascript,Ecmascript 6,我想用两个不同的函数名向Javascript类添加两次相同的函数 到目前为止,我已经提出了两种实现方法 使用其他名称向原型添加函数: 添加两个函数。从第二个呼叫第一个: 第一种解决方案不是简单的类语法,第二种解决方案也可以,但我宁愿让jsut调用一个函数,而不是嵌套的函数。另外,如果原始函数中的参数数量发生变化,则我的第二个解决方案可能更难维护 有更好的办法解决我的小问题吗 其动机是我正在实现一个解析器,其中不同的规范对同一数据类型使用不同的名称(uint16、ushort、card16)。因此
其动机是我正在实现一个解析器,其中不同的规范对同一数据类型使用不同的名称(uint16、ushort、card16)。因此,为处理这些数据类型使用替代函数名将更容易遵循不同的规范。第一种方法在
类
声明之后为第二个方法的原型
对象添加第二个属性没有错。或者,如果您希望新方法的可枚举
标志与原始方法一样为假
:
Object.defineProperty(MyClass.prototype, "computeM", {
value: MyClass.prototype.computeN,
writable: true,
configurable: true,
// (The default for `enumerable` is `false`)
});
但如果不想这样做,可以使用实例属性:
class MyClass {
computeN() {
// do some computation here
}
computeM = this.computeN;
}
这是使用的,它在大多数主要的JavaScript引擎中都实现了,很快就会出现在规范中。如果你不想依赖它:
class MyClass {
constructor() {
this.computeM = this.computeN;
}
computeN() {
// do some computation here
}
}
它们都创建了一个可枚举属性。如果希望它是不可枚举的:
class MyClass {
constructor() {
Object.defineProperty(this, "computeM", {
value: this.computeN,
writable: true,
configurable: true,
// (The default for `enumerable` is `false`)
});
}
computeN() {
// do some computation here
}
}
谢谢,你的第一个解决方案就是我想要的。我也有同样的想法,但JSFIDLE将此标记为错误,所以我在实验期间甚至没有尝试运行它。@Waruyama-不用担心(这是我现在的第二个解决方案,我的第一个解决方案只是对您最初分配给
.prototype.computeM
)FWIW的一个改进,该解决方案创建了一个自己的可枚举属性,所以这和computeN不太一样,但这不太重要。
class MyClass {
constructor() {
this.computeM = this.computeN;
}
computeN() {
// do some computation here
}
}
class MyClass {
constructor() {
Object.defineProperty(this, "computeM", {
value: this.computeN,
writable: true,
configurable: true,
// (The default for `enumerable` is `false`)
});
}
computeN() {
// do some computation here
}
}