mozilla
Vos résultats de recherche

    Function.prototype.call()

    La méthode call() réalise un appel à une fonction avec une valeur this et les arguments fournis individuellement.

    Note : Bien que la syntaxe de cette fonction ressemble à celle de apply(), la différence fondamentale réside dans le fait que call() accepte une liste d'arguments, tandis que la méthde apply() accepte un unique tableau d'arguments.

    Syntaxe

    fun.call(thisArg[, arg1[, arg2[, ...]]])

    Paramètres

    thisArg
    La valeur this fournie pour l'appel de la fonction fun. La valeur peut être différente de celle actuellement vue par la méthode : si la méthode est une fonction utilisée dans un code en mode non-strict, null and undefined seront remplacés par l'objet global et les valeurs primitives seront encapsulées.
    arg1, arg2, ...
    Les arguments pour l'objet.

    Description

    Il est possible d'affecter un objet this différent lors de l'appel à une fonction existante.En général, this fait référence à l'objet courant, celui sur lequel est appelé la méthode.

    Avec call, on peut écrire une méthode une seule fois et ensuite en hériter dans un autre objet, sans avoir à la réécrire.

    Exemples

    Utiliser call pour chaîner le constructeur d'un objet.

    Il est possible d'utiliser call pour chaîner le constructeur d'un objet, de façon similaire à Java. Dans l'exemple suivant, le constructeur de l'objet Product est défini avec deux paramètres, name et price. Deux autres fonctions, Food et Toy invoquent Product en passant this, name et price. Product initialise les propriétés name et price, tandis que les fonctions spécialisées définissent la propriété category.

    function Product(name, price) {
      this.name = name;
      this.price = price;
    
      if (price < 0)
        throw RangeError('Impossible de créer "' + name + '" avec un prix négatif');
      return this;
    }
    
    function Food(name, price) {
      Product.call(this, name, price);
      this.category = 'food';
    }
    Food.prototype = Object.create(Product.prototype);
    
    function Toy(name, price) {
      Product.call(this, name, price);
      this.category = 'toy';
    }
    Toy.prototype = Object.create(Product.prototype);
    
    var cheese = new Food('feta', 5);
    var fun = new Toy('robot', 40);
    

    Utiliser call pour invoquer une fonction anonyme

    Dans cet exemple (purement inventé), on crée une fonction anonyme et on utilise call pour l'invoquer sur chaque objet d'un tableau. Le principal but de cette fonction anonyme est d'ajouter une fonction print sur chaque élément qui permet d'afficher l'index de l'objet. Le passage de l'objet en tant que valeur this n'était pas nécessaire, mais il permet d'expliquer le sujet.

    var animaux = [
      {espèce: 'Lion', nom: 'Roi'},
      {espèce: 'Éléphant', nom: 'Dumbo'}
    ];
    
    for (var i = 0; i < animaux.length; i++) {
      (function (i) { 
        this.print = function () { 
          console.log('#' + i  + ' ' + this.espèce + ': ' + this.nom); 
        } 
        this.print();
      }).call(animaux[i], i);
    }
    

    Spécifications

    Spécification Statut Commentaires
    Troisième édition d'ECMAScript. Standard Définition initiale. Implémentée avec JavaScript 1.3.
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Function.prototype.call' dans cette spécification.
    Standard  
    ECMAScript 6 (ECMA-262)
    La définition de 'Function.prototype.call' dans cette spécification.
    En cours de validation comme recommandation  

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
    Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributors to this page: teoli, SphinxKnight, peb85, darul75, hu9o, Yopai
    Dernière mise à jour par : SphinxKnight,