Dans la programmation orientée objet, de nombreux langages prennent en charge la surcharge de fonctions, qui peut effectuer différentes opérations en fonction du nombre et du type de paramètres transmis par la fonction. Cependant, JS ne la prend pas en charge et nous oblige à faire un peu plus. petits gestes.
Il existe une variable intéressante appelée arguments dans le contexte d'exécution de fonction de JS. Elle stocke tous les paramètres passés lors de l'exécution de la fonction sous forme de tableau, même si la définition de la fonction ne définit pas autant de paramètres formels. paramètres. Une autre particularité est que par rapport au type Array, la variable arguments n'a et n'a qu'un seul attribut de longueur. Les méthodes Array, telles que push, pop, etc., ne l'ont pas. C'est juste un "pseudo-tableau" : elle en a. l'attribut length et stocke le tableau. Le tableau est accessible à l'aide de l'accesseur de tableau [] et est en lecture seule et non inscriptible.
1. Surcharge pour différents nombres de paramètres
Cela devrait être clair ici, utilisez simplement l'attribut length de la fonction arguments pour juger.
2. Surcharge des différents types de paramètres Pour un langage typé dynamiquement comme JS, la nature arbitraire des déclarations de variables dilue l'importance des types de variables stricts dans l'esprit des développeurs (PS : c'est également basé sur le système ECMA, et AS a introduit le type obligatoire de déclaration de variable). De nombreux BUG inattendus sont en réalité provoqués par cette conversion automatique des types de variables. En fait, JS nous fournit une méthode très précise pour détecter strictement le type de variables. Les plus courantes sont la méthode typeof et l'attribut constructeur.
1. typeof variable renvoie le type de variable
temp = "say" //string;
temp = 1; //numéro
temp = non défini; //non défini
temp = null; //objet
temp = {}; /object
temp = true; //boolean
temp = function (){} //function
alert(typeof temp);
Grâce au test ci-dessus, vous pouvez voir que les types d'objet null, Object et Array renvoient, et la méthode suivante peut résoudre ce problème.
2.L'attribut Constructor détecte le type de variable
Chaque objet dans JS a un attribut constructeur, qui est utilisé pour référencer la fonction qui construit cet objet. Le type de variable peut être détecté en jugeant cette référence.
Copier le code
Le code est le suivant :temp = "say" temp.constructor ==String; //true temp= {};
temp.constructor == Objet;//true
temp= []; /vrai
Grâce au test ci-dessus, il est facile de distinguer les variables de type Tableau et Objet. Faisons un test sur l'objet personnalisé pour voir ce qui se passe.
Copier le code
basketBall.constructor==Ball; //true
Cela peut montrer que l'attribut constructeur est également applicable aux objets personnalisés.
Après avoir clarifié l'application des deux méthodes ci-dessus, revenons à la simulation de surcharge de fonctions JS. L'exemple suivant est une surcharge basée sur les types de paramètres.
Copier le code
Le code est le suivant :
function talk(msg){
var t = typeof msg;
if(t=="string"){
alert("C'est une chaîne"
}
else if(t=="number"){
alert("C'est un numéro");
}
}
talk(10); //C'est une chaîne
talk("demo"); //C'est un numéro
Ci-joint une fonction très intelligente qui détecte strictement les types et les numéros de paramètres :
//Vérifier strictement une liste de variables basée sur la liste des paramètres Le type de
function strict( types, args ) {
//Assurez-vous que le nombre de paramètres correspond au type core
if ( types.length != args.length ) {
//Si la longueur ne correspond pas, alors une exception est levée
throw "Nombre d'arguments non valide. " types.length " attendu, reçu " args.length " à la place. "; i < args.length; i ) {
utiliser avec utiliser utiliser utiliser utiliser utiliser hors de types[i] ) throw "Type d'argument non valide. Attendu " " >}
//Utilisation de la méthode ci-dessus
function doFunction(id,name){
//Détecter le nombre et le type de paramètres
strict([Number,String],arguments); ..
}