Compare functions in Javascript -
i have api takes function input, , inside api, intent add function array if function not added array.
the call api of form:
myapihandle.addifunique(function(){ myresource.get(myobj); }); the api is:
myapihandle.addifunique(myfunc) { if (myarray.indexof(myfunc) === -1) { return; } // add array } now not work expected, since each time new function being passed in.
my question is: there way pass in function myapihandle.addifunique call allow me compare existing functions in array function passed in? comparison should compare function name , object, , if both same, not add function array. want avoid adding argument addifunique call if @ possible.
in other words, below possible:
myapicall.addifunique (somefunc) { } if so, somefunc. , logic inside api detect if function exists in myarray?
the same problem occurs addeventlistener , removeeventlistener, callback must identical (in === sense) removeeventlistener remove it.
as you've found, if call addifunique this:
addifunique(function() { }) the function passed each time unique object. solution create function once:
var fn = function() { }; addifunique(fn); addifunique(fn); a related problem occurs when function being passed in method invocation, need bind it:
var x = { val: 42, method: function() { console.log(this.val); } }; i want pass bound version of it, so
addifunique(x.method.bind(x)); addifunique(x.method.bind(x)); but again, each call x.method.bind(x) return separate function. need pre-bind:
var boundmethod = x.method.bind(x); addifunique(boundmethod); addifunique(boundmethod);