Learning reactive programming and encouter this bit of code,
results.push.apply(results, subArray);
understand apply
FULL CODE
Array.prototype.concatAll = function() {
var results = [];
this.forEach(function(subArray) {
results.push.apply(results, subArray);
});
return results;
};
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
but when this code appear and get my head spinning. it’s pretty much doing the concat. can someone please explain?
many thanks
Advertisement
Answer
some_function.apply(obj, [a, b, c])
is (basically…) the same as:
obj.some_function(a, b, c)
Which is: “invoke the function, referenced by ‘some_function’, with ‘obj’ as the ‘this argument’, and the list of parameters as parameters”.
That is, calling the function (in your case, ‘push’) as if it was a member of ‘obj’ (in you case ‘results’).
See: Function.prototype.apply for details.
An example to play around with:
var o1 = {
name: 'First object',
f: function(a, b ,c) {
console.log(this, a, b, c);
}
};
o1.f('Hello', 'World', '!');
var o2 = {
name: 'Second object'
};
var some_function = o1.f; // This illustrates that the function is not bound to o1...
some_function.apply(o2, ['foo', 'bar', 'baz']);