★ wanayoo — archive 1999 https://developer.mozilla.org/fr/docs/JavaScript/Reference/Operators/instanceofNouvelle recherche | Portail wanayoo
Vos résultats de recherche

    instanceof

    Résumé

    L'opérateur instanceof test si un objet possède la propriété prototype d'un constructeur donné dans sa chaîne prototype.

    Opérateur
    Ajouté à : JavaScript 1.4
    Version ECMAScript : ECMA-262 ? Edition

    Syntaxe

    objet instanceof constructeur

    Paramètres

    objet
    L'objet à tester.
    constructeur
    Fonction de référence pour effectuer le test.

    Description

    L'opérateur instanceof test la présence de constructeur.prototype dans la chaîne prototype d'objet.

    function C(){} // Définition du constructeur
    function D(){} // Définition d'un autre constructeur
    
    var o = new C();
    o instanceof C; // true, car : Object.getPrototypeOf(o) === C.prototype
    o instanceof D; // false, car D.prototype n'existe pas dans la chaîne prototype de o
    o instanceof Object; // true (voir ligne suivante)
    C.prototype instanceof Object // true, car tout objet dépend de Object
    
    C.prototype = {};
    var o2 = new C();
    o2 instanceof C; // true
    o instanceof C; // false, car C.prototype n'existe plus dans la chaîne prototype de o
    
    D.prototype = new C(); // Utilisation de l'héritage
    var o3 = new D();
    o3 instanceof D; // true
    o3 instanceof C; // true
    

    À noter que si la valeur retournée par instanceof peut changer suite à un changement de la propriété prototype du constructeur, ce n'est pas le cas en changeant le prototype d'un objet. En effet, changer le prototype d'un objet n'est pas possible suivant le standard ECMAScript. C'est néanmoins possible en utilisant la pseudo-propriété __proto__ non-standard.

    instanceof dans d'autres contextes (frames ou windows)

    Différents niveaux d'intégrations ont différents environnements. Cela signifie que les valeurs retournées sont différentes (objet globaux différents, constructeurs différents, etc.). Cela peut engendrer des résultats inattendus. Par exemple, [] instanceof window.frames[0].Array retournera false, car Array.prototype !== window.frames[0].Array et que les tableaux héritent de leur instancieur. Cela peut être contre-intuitif au début, mais lorsqu'il est nécessaire de travailler avec plusieurs frames ou fenêtres, et que des objets sont transférés via des fonctions, cela sera un obstacle valide et important. Par exemple, il est tout à fait possible d'utiliser Array.isArray(myObj) pour vérifier de manière sécurisée qu'un tableau est effectivement un tableau.

    Note aux développeurs Mozilla:
    Dans un code utilisant XPCOM, instanceof à un comportement particulier : obj instanceof xpcomInterface (ex : Components.interfaces.nsIFile) appelle obj.QueryInterface(xpcomInterface) et retourne true si QueryInterface réussi. Un effet indésirable à cela est qu'il est possible d'utiliser les propriétés de xpcomInterface sur obj après un test réussi d'instanceof. Contrairement au JavaScript classique, obj instanceof xpcomInterface fonctionnera comme prévu même si obj appartient à un autre niveau d'organisation (fenêtre, frame, etc.).

    Exemples

    Exemple : démonstration que String et Date sont de type Object

    Le code suivant utilise instanceof pour démontrer que les objets String et Date sont aussi de type Object (ils dérivent d'Object).

    var maString = new String();
    var maDate = new Date();
    
    maString instanceof String; // retourne true
    maString instanceof Object; // retourne true
    maString instanceof Date;   // retourne false
    
    maDate instanceof Date;     // retourne true
    maDate instanceof Object;   // retourne true
    maDate instanceof String;   // retourne false
    

    Exemple : démonstration que mavoiture est de type Voiture et de type Object

    Le code suivant créé un objet de type Voiture et une instance de cet objet, mavoiture. L'opérateur instanceof montre que l'objet mavoiture est de type Voiture et de type Object.

    function Voiture(fabricant, modele, annee) {
      this.fabricant = fabricant;
      this.modele = modele;
      this.annee = annee;
    }
    var mavoiture = new Voiture("Citroën", "C3", 2006);
    var a = mavoiture instanceof Voiture; // retourne true
    var b = mavoiture instanceof Object;  // retourne true
    

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributeurs ayant participé à cette page : Slagt, Automatik
    Dernière mise à jour par : Automatik,