Стандартным способом является использование логического флага.
Но, если у вас есть отвращение к booleans
, вы можете сделать это, переписав функцию, таким образом гарантируя, что ее буквально никогда больше не вызовут.
function loadButOnlyOnce() {
console.log('This will only happen once!');
loadButOnlyOnce = function() {};
}
loadButOnlyOnce();
loadButOnlyOnce();
Ваша среда IDE, вероятно, будет выдавать предупреждения в виде строки «Что вы делаете, это перезаписывает функцию!».Но это ваш код, и вы можете сделать это, если хотите.
Итак, теперь вы хотите общее решение, которое вы можете использовать с различными функциями?Вы можете сделать это так:
function allowOnlyOneCall(f) {
return function() {
f.apply(this, arguments);
f = function() {};
}
}
function myMethod(p1) {
console.log('myMethod is being invoked. p1 = ' + p1);
}
myMethod = allowOnlyOneCall(myMethod);
myMethod(5);
myMethod(5);