12
votes

Appelez une fonction de JavaScript Array

J'ai ce code: xxx

pourquoi foo.bar () alerte 2 tandis que [foo.bar ] [0] () Alertes non défini ?


4 commentaires

Je ne sais pas pourquoi, mais [foo.bar] [0] .Call (foo) fonctionne.


quand vous appelez cela comme [foo.bar] [0] () cela pointe en réalité la fonction elle-même


@Kimitsudesu Nope, Ce pointe vers le tableau [foo.bar] , pas la fonction elle-même.


mon mauvais, je suis trompé là-bas


4 Réponses :


0
votes

c'est parce que lorsque vous faites [foo.bar] un tableau Vous vous en isolez à partir de l'objet principal (FOO) et de votre fonction que vous alertez this.x et dans un objet nouvellement créé [foo.bar] ceci est indéfini


0 commentaires

9
votes

donc, techniquement [foo.bar] [0] code> est équivalent à foo.bar code>, mais au point d'appeler la fonction bar code > a perdu la "liaison lexicale" avec l'objet foo code>, donc lorsque vous l'appelez, JavaScript exécute en réalité les éléments suivants: xxx pré>

généralement, cette expression: p> xxx pré>

est interprété comme: p> xxx pré>

dans ce cas xxx code> est [foo.bar] code> et .yyy code> est [0] code>. em> p>

pour le réparer, vous devez explicitement Bind FOO code> à nouveau: P>

[foo.bar][0].call(foo);


0 commentaires

3
votes

Lorsque vous faites [foo.bar] [0] () , Ceci dans la barre est est [foo.bar ] , la matrice mais pas l'objet foo .

Il suffit d'imagerie que le nom de la méthode est le numéro 0 (Bien que ce soit une mauvaise syntaxe). < / p> xxx

et [foo.bar] .x est non défini .


0 commentaires

1
votes

C'est parce que vous appelez la fonction sur l'objet Array. Le mot clé "Ce" est égal à la matrice.

var test=[foo.bar][0];
test();`//here is alert "2" 


0 commentaires