var name = "123";
var object = {
name: "My Object",
getNameFunc: function() {
return this.name;
}
}
console.log(object.getNameFunc()); //My Object
console.log((object.getNameFunc)()); //My Object
console.log((object.getNameFunc = object.getNameFunc)()); //123
Pourquoi le résultat final est-il de 123 ? Que signifie object.getNameFunc = object.getNameFunc ?
J'ai mal lu la question, laissez-moi l'expliquer à nouveau.
Premier regard sur
object.getNameFunc
, sa définition estQuand vous écrivez
object.getNameFunc = object.getNameFunc
comme ça, cela peut en fait être vu comme ça.En fait, en faisant une telle chose,
this
已经不是object
了。而是window
(在浏览器里)了。所以输出的是外面的name
.Probablement comme ça = =
Le résultat de l'opération d'affectation est une lvalue.
Par conséquent
(object.getNameFunc = object.getNameFunc)()
peut être considéré comme :
Donc
this
pointe vers le global, donc nous obtenons 123À en juger par les résultats des citations, cela doit indiquer la situation globale. Il peut y avoir des liens au milieu qui ne sont pas compris.
Si on ajoute un morceau de code à la fin, on peut savoir quel est le contenu de (obj.getNameFunc = obj.getNameFunc) Oui, il y a une fonction dans la console, donc l'instruction (obj.getNameFunc = obj. getNameFunc) est exécuté Le résultat est une fonction. La pensée inertielle nous amène à considérer comme acquis qu'il ne s'agit que d'une opération de réaffectation, et que c'est toujours obj qui appelle la fonction.
En fait, une fois l'instruction exécutée, cette fonction est en fait appelée par l'objet global.