你仍然可以在类的原型上附加一个方法;毕竟,类只是“功能对象”上的语法糖,这是使用函数构造对象的旧方法。
由于您想使用 ES6,我将使用 ES6 导入。
最小的努力,使用原型:
import getColor from 'path/to/module';
class Car {
...
}
Car.prototype.getColor = getColor;
如您所见,如果您愿意,您仍然使用原型属性来附加方法。
在类的方法中调用module:
或者,如果您不想使用原型属性,您始终可以让您的方法从module返回函数:
import getColor from 'path/to/module';
class Car {
getColor () {
return getColor.call(this);
}
}
使用吸气剂
您也可能有点棘手,并使用“getter”以不同的方式实现这一点。
import getColor from 'path/to/module';
class Car {
get getColor () { return getColor.bind(this) }
}
然后你可以简单地通过调用来使用它, myInstanceOfCar.getColor()
或者在更语义化的 getter 用法中:
class Car {
get color () { return getColor.call(this) }
}
// ...
const color = myInstanceOfCar.color;
请记住,getter/setter 不能与您在构造函数中设置的属性同名。当您尝试使用 setter 设置相同的属性时,您最终会以无限递归超过最大调用堆栈。例子:set foo (value) { this.foo = value }
ES2016 类属性
如果您使用 Babel 进行转译(并且正在使用实验性提案),并且想要使用一些ES2016,您可以使用以下语法(但请记住,这将方法直接应用于对象,而不是将其设置为原型):
import getColor from 'path/to/module';
class Car {
getColor = getColor;
}
带有类属性的可选绑定
如果您使用速记语法来设置属性,则不必绑定该方法(设置是作为属性更改“this”所指的内容,本质上是自动绑定它的),但是您当然可以,如果您选择(就像你想绑定其他东西一样):
getColor = getColor.bind(this);