Я написал JS простой класс:
// JS simple class
class myClass
{
constructor(init=0) { this.var = init; }
add(n) { this.var+=n; return this; }
sub(n) { this.var-=n; return this; }
}
Этот класс можно использовать с цепочкой методов:
// Works well
obj1 = new myClass(0);
obj1.add(5);
obj1.sub(2);
console.log (obj1.var);
// Method chaining, works well
obj2 = new myClass(0);
obj2.add(9).sub(4).add(3);
console.log (obj2.var);
Я хотел бы создать замыкание для удобства, поэтому класс можно использовать без явного создания нового объекта. Например, я хотел бы что-то вроде:
obj(0).add(5).sub(2);
При вызове obj(0)
создается новый экземпляр класса. Я написал следующее закрытие, но следующее не работает:
// Closure instantiating the class
var obj = function(init)
{
var obj = new myClass(init)
return { add:this.add, sub:this.sub };
}
При вызове obj(0).add(3);
в консоли отображается следующая ошибка:
Uncaught TypeError: obj(...).add is not a function at window.onload ((index):58)
У меня нет Я знаю, как это сделать, и я даже не уверен, что закрытие является правильным инструментом.
Обратите внимание, что у меня уже есть рабочее решение без класса (с замыканиями), но я хотел бы сохранить свой класс.
Я сделал JSFiddle здесь