Есть метод, в который передается некая функция.
Мне нужно отследить, сколько раз в этот метод была передана одна и та же функция. Функции в метод поступают в большом количестве и часто разные, но среди этого потока бывают вызовы одной и той же функции.
MyClass.prototype.method = function(fn){
fn.apply(this, []);
};
Можно складывать все функции в обычный массив, а при каждом вызове пробегать его целиком, сравнивая функции, но это ужос и тормоза:
var functions_array = [];
MyClass.prototype.method = function(fn){
var found = false;
for(var i=0; i<functions_array.length; i++){
if( functions_array[i] === fn ){
// Функцию уже вызывали
found=True; break;
}
}
if( !found ) functions_array.push(fn);
fn.apply(this, []);
};
А можно, наверное, как-то проиндексировать функцию и сформировать ключ?
var functions_storage = {};
MyClass.prototype.method = function(fn){
var found = false;
var key = index_function(fn);
if( functions_storage[key] !== undefined ){
// Функцию уже вызывали
found=True;
}
if( !found ) functions_storage[key] = fn;
fn.apply(this, []);
};
Вот как мне сформировать `key` для функции, чтобы он точно идентифицировал эту функцию и отлавливал
именно её повторные вызовы?