Maison > interface Web > js tutoriel > Solution aux compétences de surcharge de la fonction JS_javascript

Solution aux compétences de surcharge de la fonction JS_javascript

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-05-16 16:48:37
original
1420 Les gens l'ont consulté

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.


Copier le code Le code est le suivant :



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

Copier le code Le code est le suivant :
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

Le code est le suivant ://Objet personnaliséfonction Balle () {} //Instancier un objet var basketBall = new Ball();
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 :

Copier le code Le code est le suivant :

//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); ..
}

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal