2017-06-27 2 views
-2

Je manque accidentellement ce mot-clé à l'intérieur de setter, méthodes getter. Elle conduit à quelques bugs étranges: (testé avec Chrome, Firefox)Mot-clé "this" manquant dans setter javascript, méthodes getter

Cas 1:

let user = { 
    name: "John", 

    set fullName(value) { 
     name = value; 
    }, 

    get fullName() { 
     return name; 
    } 
}; 

user.fullName // "" 
user.fullName = "Batman" 
user.fullName // "Batman" 
user.name // "John" 

Pourquoi la propriété nom encore "John"? D'où vient "Batman"?

Cas n ° 2: changer le nom variable du code ci-dessus, il arrive quelque chose:

let user = { 
    anythingButName: "John", 

    set fullName(value) { 
     anythingButName = value; 
    }, 

    get fullName() { 
     return anythingButName; 
    } 

    user.fullName // anythingButName is not defined at Object.get fullName [as fullName]... 
}; 

ne pouvez utiliser aucun nom, mais le mot nom pour la variable dans le code ci-dessus. Je ne sais pas pourquoi?

+3

console.log (window.name); –

Répondre

1

Les deux cas sont égaux. Qu'est-ce qui se passe:

let user = { 
    name: "John", 

set fullName(value) { 
    name = value;//sets window.name to *value* 
}, 

get fullName() { 
    return name;//returns window.name 
} 
}; 

console.log(
user.fullName,// window.name is "" by default 
window.name, 
user.fullName = "Batman", //=> window.name 
window.name, 
user.fullName, // "Batman" ==window.name 
user.name // "John" //what you really wanted 
); 

Il fonctionne (pas vraiment) juste avec nom comme window.name est une propriété par défaut et donc réglé sur « » au début. Vous pouvez enregistrer votre deuxième cas:

console.log(
    user.fullName, // undefined yet 
    user.fullName="test", 
    user.fullName // test 
);