Ответ 1
Вы можете прикрепить метод к прототипу class; после всего, классы - это просто синтаксический сахар над "функциональным объектом", который является старым способом использования функции для построения объектов.
Поскольку вы хотите использовать ES6, я буду использовать импорт ES6.
Минимальное усилие, используя прототип:
import getColor from 'path/to/module';
class Car {
...
}
Car.prototype.getColor = getColor;
Как вы можете видеть, вы все еще используете свойство prototype для присоединения метода, если хотите.
Вызов модуля внутри метода класса:
В качестве альтернативы, если вы не хотите использовать свойство prototype, вы всегда можете вернуть свой метод из модуля:
import getColor from 'path/to/module';
class Car {
getColor () {
return getColor.call(this);
}
}
Использование Getter
Вы также можете быть немного сложнее и использовать "getter" для достижения этого по-другому.
import getColor from 'path/to/module';
class Car {
get getColor () { return getColor.bind(this) }
}
Затем вы можете использовать его, просто позвонив myInstanceOfCar.getColor()
Или в более семантическом использовании геттера:
class Car {
get color () { return getColor.call(this) }
}
// ...
const color = myInstanceOfCar.color;
Имейте в виду, что getters/setters не могут иметь то же имя, что и свойства, заданные в конструкторе. В конечном итоге вы превысите максимальный стек вызовов с бесконечной рекурсией, когда вы попытаетесь использовать установщик для установки того же свойства. Пример: set foo (value) { this.foo = value }
Свойства класса ES2016
Если вы используете Babel для пересылки (и с использованием экспериментальных предложений), и хотите используйте ES2016, вы можете использовать следующий синтаксис (но имейте в виду, что это относится к методу непосредственно к объекту и не устанавливает его на прототипе):
import getColor from 'path/to/module';
class Car {
getColor = getColor;
}
Необязательное связывание с свойствами класса
Если вы используете стенографию ES7 для установки свойства, вам не нужно связывать метод (настройка как свойство изменяется, к которому относится "this", по существу автоматически привязывая его), но вы, безусловно, можете, если вы захотите (например, если вы хотите связать что-то еще):
getColor = getColor.bind(this);
Или, если вы хотите получить еще более экспериментальный, вы можете использовать предложенный синтаксис "::" для привязки, который будет выглядеть так:
getColor = this::getColor; // or just "::getColor" if binding to its current value