mozilla
Vos résultats de recherche

    Function

    Résumé

    Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction est un objet Function.

    Syntaxe

    new Function ([arg1[, arg2[, ...argN]],] corpsFonction)

    Paramètres

    arg1, arg2, ... argN
    Les noms utilisés par la fonction pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide (ou une liste de telles chaînes séparées par des virgules). Par exemple : "x", "uneValeur", ou "a,b".
    corpsFonction
    Une chaîne de caractères qui contient les instructions JavaScript définissant la fonction.

    Description

    Les objets Function créés avec le constructeur Function sont analysés quand la fonction est créée. Ceci est moins efficace que de déclarer une fonction grâce à une expression de fonction ou à une instruction function car celles crées de cette façon sont analysées avec le reste du code.

    Tous les arguments passés à la fonction seront traités avec les noms des identifiants des paramètres de la fonction à créer, dans le même ordre dans lequel ils ont été passés.

    Note : Les fonctions créées avec le constructeur Function ne créent pas de fermetures avec leurs contextes. Elles sont toujours créées dans la portée grlobal. Lorsqu'elles sont exécutées, elles ne pourront accéder qu'à leurs propres variables locales et aux variables globales et ne pourront pas accéder à celles de la portée dans laquelle le constructeur Function a été appelé. Le comportement obtenu est donc différent de celui obtenu avec eval dont le code contient une expression de fonction.

    Appeler le constructeur Function comme une fonction (c'est-à-dire sans utiliser l'opérateur new) a le même effet que quand il est appelé comme constructor.

    Propriétés et méthodes de Function

    L'objet global Function ne possède pas de méthodes ou de propriétés propres. Cependant, il est lui-même une fonction et hérite de certaines méthodes et propriétés depuis Function.prototype grâce à la chaîne de prototype.

    Le prototype de Function

    Propriétés

    Méthodes

    Les instances de Function

    Les instances de Function héritent des méthodes et propriétés de Function.prototype. Comme pour les autres constructeurs, il est possible de modifier le prototype du constructeur afin d'apporter des modifications à toutes les instances de Function.

    Exemple

    Définir des arguments avec le constructeur Function

    Le code suivant permet de créer un objet Function qui utilise deux arguments :

    // Cet exemple peut être lancé dans votre console JavaScript
    
    // On crée un fonction qui prend deux arguments 
    // et qui en renvoie la somme
    var ajoute = new Function('a', 'b', 'return a + b');
    
    // On appelle la fonction
    ajoute(2, 6);
    // > 8
    

    Les arguments "a" et "b" sont les noms des arguments formellement déclarés utilisés dans le corps de la fonction : "return a + b".

    Une fonction récursive pour massivement modifier le DOM

    Créer des fonctions avec le constructeur Function permet de créer dynamiquement un nombre indéterminé d'objets avec un code exécutable dans la portée globale. L'exemple qui suit (qui consiste en une fonction récursive qui modifie le DOM) est impossible à faire à chaque nouvelle requête si on souhaite éviter les fermetures.

    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Exemple MDN - Une fonction récursive qui modifie le DOM</title>
    <script type="text/javascript">
    var domQuery = (function() {
      var aDOMFunc = [
        Element.prototype.removeAttribute,
        Element.prototype.setAttribute,
        CSSStyleDeclaration.prototype.removeProperty,
        CSSStyleDeclaration.prototype.setProperty
      ];
    
      function setSomething(bStyle, sProp, sVal) {
        var bSet = Boolean(sVal), fAction = aDOMFunc[bSet | bStyle << 1],
            aArgs = Array.prototype.slice.call(arguments, 1, bSet ? 3 : 2),
            aNodeList = bStyle ? this.cssNodes : this.nodes;
    
        if (bSet && bStyle) { aArgs.push(''); }
        for (
          var nItem = 0, nLen = this.nodes.length;
          nItem < nLen;
          fAction.apply(aNodeList[nItem++], aArgs)
        );
        this.follow = setSomething.caller;
        return this;
      }
    
      function setStyles(sProp, sVal) { return setSomething.call(this, true, sProp, sVal); }
      function setAttribs(sProp, sVal) { return setSomething.call(this, false, sProp, sVal); }
      function getSelectors() { return this.selectors; };
      function getNodes() { return this.nodes; };
    
      return (function(sSelectors) {
        var oQuery = new Function('return arguments.callee.follow.apply(arguments.callee, arguments);');
        oQuery.selectors = sSelectors;
        oQuery.nodes = document.querySelectorAll(sSelectors);
        oQuery.cssNodes = Array.prototype.map.call(oQuery.nodes, function(oInlineCSS) { return oInlineCSS.style; });
        oQuery.attributes = setAttribs;
        oQuery.inlineStyle = setStyles;
        oQuery.follow = getNodes;
        oQuery.toString = getSelectors;
        oQuery.valueOf = getNodes;
        return oQuery;
      });
    })();
    </script>
    </head>
    
    <body>
    
    <div class="testClass">Lorem ipsum</div>
    <p>Some text</p>
    <div class="testClass">dolor sit amet</div>
    
    <script type="text/javascript">
    domQuery('.testClass')
      .attributes('lang', 'en')('title', 'Risus abundat in ore stultorum')
      .inlineStyle('background-color', 'black')('color', 'white')('width', '100px')('height', '50px');
    </script>
    </body>
    
    </html>

    Spécifications

    Spécification Statut Commentaires
    Première édition d'ECMAScript. Standard Définition initiale. Implémentée avec JavaScript 1.0.
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Function' dans cette spécification.
    Standard  
    ECMAScript 6 (ECMA-262)
    La définition de 'Function' dans cette spécification.
    Draft  

    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: Sheppy, tregagnon, SphinxKnight, darul75, daniel35310, teoli, rat, LaBoumerde
    Dernière mise à jour par : SphinxKnight,