Vous ne connaissez pas la série JS (36) - [[Get]] et [[Put]]

[[Avoir]]
Access Object il y a un détail subtil mais très important dans la réalisation
var myObject = {
  a: 2
}
myObject.a; // 2

myObject.a est un accès à la propriété, à la réalisation, myObject.a sur myObject effectivement atteint [[Get]] opération (un peu comme un appel de fonction: [[Get]] ()). Regardez d'abord si l'objet a le même nom de la propriété, se trouve elle retourne la valeur de cette propriété. Si aucune se trouve, par définition [[Get]] algorithme effectue un autre comportement très important est de traverser la chaîne de prototype qui peut exister. Si dans tous les cas ne sont pas trouvés, il renvoie la valeur non définie

var myObject = {
  a: 2
}
myObject.b; // non défini

 

 

[[Mettre]]
Vous pourriez penser que les ayants droit les déclencheurs d'objet un [[Put]] pour définir ou créer la propriété, mais en fait pas tout à fait le cas. [[Mettre]] est déclenchée, le comportement réel dépend de nombreux facteurs, y compris l'existence de cet objet d'attribut. Si la propriété existe déjà
1 , si la propriété est descripteur d'accès, et s'il y a un setter est appelé setter
 2, si le descripteur de données d'attribut modifiable est faux , il appellera échoue, jetteront une exception en mode strict
 3, sinon, la valeur est pour la valeur de la propriété

Si cet attribut ne figure pas dans l'objet, [[Mettre]] opération est plus compliquée

 

Je suppose que tu aimes

Origine www.cnblogs.com/wzndkj/p/12563707.html
conseillé
Classement