Question

Je lis ECMAScript Language Specification section Appels de fonction

Quelqu'un peut-rephrase ou détaillée explique la sentense suivante pour moi?

  

Le CallExpression de production:   MemberExpression Arguments   évalué comme suit:

     
      
  1. Evaluer MemberExpression.
  2.   

nous allons prendre ce code comme exemple.

var john = { 
  name: 'John', 
  greet: function(person) { 
    alert("Hi " + person + ", my name is " + this.name); 
  } 
}; 

john.greet("Mark");

Prenez le code ci-dessus comme un exemple, que signifie la production CallExpression? ce qui est MemberExpression dans ce cas, john.greet?

Merci!

Était-ce utile?

La solution

Le MemberExpression est john.greet. Fondamentalement, ce qu'il dit est: Étape 1: Calculez ce que la fonction à appeler. :-) La partie john est important, car il entre en plus tard.

Voici la citation complète de la spécification la plus récente (votre lien est à la 3ème édition, qui a été supplanté par le 5ème édition , ce qui n'a pas beaucoup changé si):

  
      
  1. Que ref soit le résultat de l'évaluation MemberExpression.
  2.   
  3. Laissez func être GetValue (ref).
  4.   
  5. Soit argList être le résultat de l'évaluation Arguments, la production d'une liste interne des valeurs d'arguments (voir 11.2.4).
  6.   
  7. Si le type (Func) n'est pas l'objet, jeter une exception TypeError.
  8.   
  9. Si IsCallable (Func) est faux, lancer une exception TypeError.
  10.   
  11. Si le type (ref) est référence,   
    a. Si IsPropertyReference (ref) est vrai,   
    i. Laissez ThisValue être getBase (ref).   
    b. Sinon, la base de la référence est un dossier de l'environnement   
    i. Soit ThisValue le résultat d'appeler la méthode béton ImplicitThisValue de getBase (ref).
  12.   
  13. Sinon, type (ref) n'est pas référence.   
    a. Laissez-ThisValue être défini.
  14.   
  15. Retour le résultat de l'appel de la [[Appel]] méthode interne sur Func, fournissant ThisValue comme cette valeur et en fournissant la liste argList les valeurs de l'argument.
  16.   

Comme vous pouvez le voir, john est en elle à nouveau à 6 (a) parce que l'expression est une référence de la propriété, de sorte que la valeur this est john (plutôt que l'objet global, car il serait si vous avez appelé ce pas par une référence de la propriété).

Si vous lisez les spécifications, je recommande de lire un plus récent au lieu de l'ancienne (pas de version HTML encore). Je crains que la prose est pas moins ampoulée, cependant. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top