Хорошо, скажем, что у нас есть это:
class Car {
constructor(name) {
this.kind = 'Car';
this.name = name;
}
printName() {
console.log('this.name');
}
}
то, что я хочу сделать, это определить printName, что-то вроде этого:
class Car {
constructor(name) {
this.kind = 'Car';
this.name = name;
}
// we want to define printName using a different scope
// this syntax is close, but is *not* quite correct
printName: makePrintName(foo, bar, baz)
}
где makePrintName - это функтор, что-то вроде этого:
exports.makePrintName = function(foo, bar, baz){
return function(){ ... }
};
возможно ли это с ES6? Мой редактор и TypeScript не нравится этому
ПРИМЕЧАНИЕ. Используя ES5, это было легко сделать и выглядело так:
var Car = function(){...};
Car.prototype.printName = makePrintName(foo, bar, baz);
Использование синтаксиса класса, в настоящее время лучшее, что работает для меня, заключается в следующем:
const printName = makePrintName(foo,bar,baz);
class Car {
constructor(){...}
printName(){
return printName.apply(this,arguments);
}
}
но это не идеально. Вы увидите проблему, если попытаетесь использовать синтаксис класса для выполнения синтаксиса ES5. Таким образом, оболочка класса ES6 является нечеткой абстракцией.
Чтобы увидеть реальный пример использования, см.
https://github.com/sumanjs/suman/blob/master/lib/test-suite-helpers/make-test-suite.ts#L171
проблема с использованием TestBlock.prototype.startSuite = ...
заключается в том, что в этом случае я не могу просто вернуть класс в строке:
https://github.com/sumanjs/suman/blob/master/lib/test-suite-helpers/make-test-suite.ts#L67