J'ai ce code: pourquoi foo.bar () code> alerte
2 code> tandis que
[foo.bar ] [0] () code> Alertes
non défini code>? P> p>
4 Réponses :
c'est parce que lorsque vous faites [foo.bar] code> un tableau Vous vous en isolez à partir de l'objet principal (FOO) et de votre fonction que vous alertez
this.x code> et dans un objet nouvellement créé [foo.bar]
ceci code> est indéfini p>
donc, techniquement généralement, cette expression: p> est interprété comme: p> dans ce cas pour le réparer, vous devez explicitement Bind [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 code> est
[foo.bar] code> et
.yyy code> est
[0] code>. em> p>
FOO code> à nouveau: P>
[foo.bar][0].call(foo);
Lorsque vous faites Il suffit d'imagerie que le nom de la méthode est le numéro et [foo.bar] [0] () code>,
Ceci code> dans la barre code> est code> est
[foo.bar ] code>, la matrice mais pas l'objet
foo code>.
0 code> (Bien que ce soit une mauvaise syntaxe). < / p>
[foo.bar] .x code> est
non défini code>. p> p> p>
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"
Je ne sais pas pourquoi, mais
[foo.bar] [0] .Call (foo) code> fonctionne.
quand vous appelez cela comme [foo.bar] [0] () cela pointe en réalité la fonction elle-même
@Kimitsudesu Nope,
Ce code> pointe vers le tableau
[foo.bar] code>, pas la fonction elle-même.
mon mauvais, je suis trompé là-bas