Cela me ramène à l'époque de la résolution et de l'expansion des équations.
1 . Tout d'abord, permet de développer la première application de fonction:
var bind = Function.prototype.bind;
var apply = bind.bind(bind.apply);
var fn = apply([].concat);
Transformations:
var apply = Function.prototype.bind.bind(Function.prototype.bind.apply);
var fn = apply([].concat)
2 . Deuxièmement, nous étendons la fonction fn:
var fn = Function.prototype.bind.bind(Function.prototype.bind.apply)([].concat);
3 . Nous avons maintenant inventer un js de l'algèbre à la règle et remplacer l' bind.bind...()
invocation à l'appel de son invocation.
En fait, nous de mettre en œuvre une base de remplacement sur l'idée que:
someFunction.bind(arg1)(arg2) <==> someFunction.call(arg1, arg2)
Par conséquent, nous pouvons la remplacer et obtenez:
var fn = Function.prototype.bind.call(Function.prototype.bind.apply, [].concat);
4 . Pour notre deuxième js algèbre règle que nous concevons que:
someFn.bind.call(target, ...) <==> target.bind(...)
.
someFn
n'est pas important ici, car nous ne les appelons pas bind() sur celui-ci. Nous invoquons call
sur le bind
- remplacement de l' this
qui a someFn
et à cet effet, il est remplacé par target
.
Par conséquent, nous remplaçons l' bind.call(target)
avec la cible.lier alternative
var fn = Function.prototype.bind.apply.bind([].concat)
5 . Si la dernière permutation a été également faire l'invocation (), nous l'aurions fait un remplacement comme:
fn([1, 2], [3, 4]) <==> [].concat.apply([1, 2], [3, 4])
Mais nous n'avons que la liaison sans l'invocation, qui nous permet de remplacer et est équivalent à:
var fn = function (arg1, arg2) {
return [].concat.apply(arg1, arg2);
}
// instead arg1 and arg2 we could use more accurate arguments logic also.
Résultat Final
var fn = Function.prototype.bind.apply.bind([].concat)
// or
var fn = function (arg1, arg2) {
return [].concat.apply(arg1, arg2);
}
L' fn
fonction prend l' concat
de la fonction et nous permet de nous dans un style fonctionnel, sans l'appeler à partir d'un objet. Au lieu de concat
lié à l' this
de l'appelant, fn
s'applique sur arg1
comme this
et arg2
comme les autres params à la concaténation d' arg1
.
fn([1, 2], [3, [5, 6], 4])
// [1, 2, 3, 5, 6, 4]