Я хотел бы создать декоратор для хранения функции с этой областью в массиве для каждого экземпляра, созданного для класса. Я не могу найти подходящие слова для объяснения, поэтому, скажем, у меня есть следующий код:
class Foo
{
constructor()
{
this.MyValue = "Foo";
}
@StoreFunction()
TestA()
{
console.log("Foo MyValue:", this.MyValue);
}
}
class Bar extends Foo
{
constructor()
{
this.MyValue = "Bar";
}
@StoreFunction()
TestB()
{
console.log("Bar MyValue:", this.MyValue);
}
}
function StoreFunction()
{
return function(target, key, descriptor)
{
// How would i go about saving the function there so i can call it later??
return descriptor;
}
}
Я знаю, что декораторы не обрабатываются во время создания экземпляра класса. Итак, я попытался сделать следующее в StoreFunction.
var StoredFunctions = [];
function StoreFunction()
{
return function(target, key, descriptor)
{
if(target._StoredFunctions)
{
target._StoredFunctions = [];
}
// Save the function's name
target._StoredFunctions.push(key);
return descriptor;
}
}
Затем привязать их в конструкторе.
class Foo
{
constructor()
{
this.MyValue = "Foo";
this.BindFunctions()
}
BindFunctions()
{
if(this._StoredFunctions)
{
this._StoredFunctions.forEach( method => {
StoredFunctions.push(this[method].bind(this));
});
}
}
}
Но опять же this._StoredFunctions не хранит StoredFunctions должным образом, поскольку они являются статическими. Я не совсем уверен, как заставить его работать правильно.
Пожалуйста, дайте мне знать, если вопрос не ясен, мне трудно объяснить проблему.