JS Array prend en charge deux méthodes, shift() et pop(), qui font respectivement référence à la suppression d'une valeur au début et à la fin d'une donnée et au renvoi de la valeur supprimée. Il suffit de regarder un exemple pour comprendre :
var arr = ['s','o','f','i','s','h'];
arr.shift(); // Renvoie 's'
arr; // Actuellement ['o','f','i','s','h']
arr.pop () // Retourne 'h'
arr // Actuellement c'est ['o','f','i','s']
C'est très courant dans de nombreux frameworks JS, A La méthode permet de passer plusieurs paramètres, et certains de ces paramètres peuvent être ignorés. Ces points ignorés peuvent être le premier ou le dernier. La manière traditionnelle d'écrire consiste à déterminer si le paramètre existe, ou le nombre de paramètres pour déterminer la valeur finale.
Ici, nous pouvons utiliser l'objet arguments de la fonction, ainsi que shift et pop dans Array pour réaliser des applications flexibles.
1. Comment implémenter une méthode .bind() en utilisant shift
, pour que l'API fn soit la suivante :
// La portée de fn est limitée à l'objet
// Sauf pour l'objet, tous les paramètres de la méthode bind seront passés à fn
fn.bind(object, param1, param2, [, paramN]);
Regardons d'abord un exemple. Bien sûr, ce qui peut être plus important dans cet exemple est l’application de call et apply. Cependant, ce dont nous voulons parler, c'est de l'application de shift :
//[`.bind`](http://www.prototypejs.org/api/function/bind) méthode de Prototype.js
Function.prototype.bind = function(){
var fn = this,
args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply( object,
args.concat(Array.prototype.slice.call(arguments)));
};
};
Nous pouvons utiliser l'objet arguments (objet de type tableau, qui doit être converti en un véritable tableau) à supprimer par décalage. Comme cette méthode, nous les utilisons principalement pour séparer l'objet en tant que portée, puis passons intelligemment le tableau de paramètres restant à fn, c'est-à-dire que nous appelons la fonction que nous avons. souhaitez limiter à la portée de l'objet.
2. Utilisez pop
J'essaie seajs récemment. Prenons comme exemple une de ses API :
define(id, dependencies, callback)
Ceci définit l'API d'un module, l'identifiant et les dépendances peuvent être omis. Ici, comment mettre en œuvre ce support ? Si vous utilisez if pour juger, vous devez vraiment utiliser if (arguments === 1) {...} elseif ... beaucoup. Bien sûr, cela présente parfois des avantages (?, réfléchissez-y). Ici, nous pouvons utiliser pop pour faciliter la mise en œuvre d'un tel support :
var definition = function(){
// Supprimez ce rappel
var args = [].slice.call(arguments)
fn = args.pop();
// Faire quelque chose D'autres choses intéressantes
fn.apply(null, args)
// ...
},
callback = function(){
var args = arguments, i = 0, len = args.length;
if(len === 0) console.log('Un seul rappel');
for(;i
console.log( args[i ]);
}
}
// Jetez un oeil aux résultats d'exécution des trois d'entre eux
define(callback);
define('has two settings', callback);
define('has three settings', 'hello world', callback);
Une référence que j'ai faite il y a deux jours alors que mes collègues et moi apprenions quelques techniques en JS. Même si je me dis toujours de ne pas trop me plonger dans le code, le code, pas seulement JS, nous donne toujours trop de plaisir. Comment ne pas aimer. Ha ha.