Я хотел бы, чтобы обернуть некоторые динамически создаваемые JavaScript функции, аналогичные принятым ответом Даниила здесь: How do I store javascript functions in a queue for them to be executed eventuallyКак обернуть функцию javascript динамическими аргументами?
// Function wrapping code.
// fn - reference to function.
// context - what you want "this" to be.
// params - array of parameters to pass to function.
var wrapFunction = function(fn, context, params) {
return function() {
fn.apply(context, params);
};
}
Разница в том, я хотел бы значения аргументов, чтобы быть динамичным во время исполнения - это можно передать ссылку на переменную в аргументах, которая может быть обновлена после ее обертывания?
Вот что я хотел бы сделать:
// I have a function to be wrapped
var sayStuff = function(a,b) {
console.log(a);
console.log(b);
}
// Variables I'd like to pass
var randomNumberA = 0;
var randomNumberB = 0;
// Wrap the function
var fun = wrapFunction(sayStuff, this, [*reference randomNumberA*,*reference randomNumberB*]);
// variables get changed
randomNumberA = Math.random()*100;
randomNumberB = Math.random()*100;
// Execute the function using current values of randomNumberA & randomNumberB
fun();
Если возможно, я хотел бы сделать это без изменения sayStuff, у меня есть много существующих функций, как это я надеюсь обернуть, что также можно использовать вне оболочки, поэтому в идеале я бы не хотел заменять аргументы на объект. Надеюсь, что имеет смысл, спасибо!
Хотя возможно, я бы вообще сказал «нет» в контексте «этого», и я точно не знаю, почему вы хотели бы это сделать? – Xotic750
Вы должны внимательно посмотреть, что примитивы всегда передаются по значению и разнице между функциями и методами. Функция становится методом, когда это зависит от 'this', которое ни одна из ваших функций не делает. – ftor
@ Xotic750 Итак, функции, которые я обертываю, - это набор звуковых фильтров. Они выполняются последовательно. Но я хотел бы рандомизировать их порядок и настройки, поэтому я хотел их обернуть в нечто общее. Однако некоторые из их аргументов должны быть динамичными. Я надеюсь, что каждый объект будет помещен в объект, так что объект будет контекстом, который я думаю. – WilliamAmateur