Maison > Questions et réponses > le corps du texte
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 ?
为情所困2017-06-26 10:57:12
J'ai mal lu la question, laissez-moi l'expliquer à nouveau.
Premier regard sur object.getNameFunc
, sa définition est
function () {
return this.name
}
Quand vous écrivez object.getNameFunc = object.getNameFunc
comme ça, cela peut en fait être vu comme ça.
object.getNameFunc = function () {
return this.name
}
En fait, en faisant une telle chose, this
已经不是 object
了。而是 window
(在浏览器里)了。所以输出的是外面的 name
.
Probablement comme ça = =
phpcn_u15822017-06-26 10:57:12
Le résultat de l'opération d'affectation est une lvalue.
Par conséquent (object.getNameFunc = object.getNameFunc)()
peut être considéré comme :
var f = (object.getNameFunc = object.getNameFunc);
f();
Donc this
pointe vers le global, donc nous obtenons 123
天蓬老师2017-06-26 10:57:12
var name = "123";
var obj = {
name: "My Object",
getNameFunc: function() {
return this.name;
}
}
console.log(obj.getNameFunc()); //My Object
console.log((obj.getNameFunc)()); //My Object
console.log((obj.getNameFunc = obj.getNameFunc)()); //123
console.log((obj.getNameFunc = obj.getNameFunc));
À 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.