1

les gars. J'étudie des propriétés pour des objets et une chose a attiré mon attention sur une source d'information. Il y avait cette partie du document qui disait cela à propos de JS. Propriétés du prototype Les objets JavaScript héritent des propriétés de leur prototype. Le mot-clé delete ne supprime pas les propriétés héritées, mais si vous supprimez une propriété prototype, cela affecte tous les objets hérités du prototype.Clarification sur l'incapacité de javascript à supprimer des propriétés héritées.

Je suis un peu perdu ici ... Je sais que cela semble stupide mais j'ai besoin de comprendre exactement ce que cela signifie au cours des processus et des applications où cela pourrait jouer.

Répondre

1

delete supprime une propriété d'un objet. Si l'objet hérite de la propriété plutôt que d'avoir sa propre propriété avec ce nom, appeler delete sur la propriété ne fait rien: vous ne pouvez pas supprimer quelque chose qui n'est pas là. :-) C'est le prototype de l'objet (ou son prototype, ou le prototype de son prototype, etc.) qui a la propriété, pas l'objet qui en hérite.

Un exemple serait probablement utile. Considérez:

// An object to use as a prototype 
 
var p = {answer: 42}; 
 
// An object using `p` as its prototype 
 
var o = Object.create(p); 
 

 
console.log(p.answer);     // 42 
 
console.log(p.hasOwnProperty("answer")); // true 
 
console.log(o.answer);     // 42 
 
console.log(o.hasOwnProperty("answer")); // false

p a la propriété, et non o; o vient de l'hériter. Comme ceci:

 
          +−−−−−−−−−−−−−−−+ 
p−−−−−−−−−−−−−−−−−−−−−−+−>| (object) | 
         | +−−−−−−−−−−−−−−−+ 
         | | [[prototype]] |−−−>(Object.prototype) 
         | | answer: 42 | 
    +−−−−−−−−−−−−−−−+ | +−−−−−−−−−−−−−−−+ 
o−−−>| (object) | | 
    +−−−−−−−−−−−−−−−+ | 
    | [[Prototype]] |−+ 
    +−−−−−−−−−−−−−−−+ 

donc delete o.answer n'a pas d'effet; o n'a pas de propriété answer pour delete à supprimer. p est l'objet avec answer.

Si nous enlevons la propriété de p (delete p.answer;), qui va l'enlever   — de p. Et puisque l'héritage est prototypique une connexion en direct entre un objet et son prototype, demandant o pour answer après avoir fait cela nous donnera undefined, puisque o (efficace) demande p pour elle, et p ne l'a pas plus:

// An object to use as a prototype 
 
var p = {answer: 42}; 
 
// An object using `p` as its prototype 
 
var o = Object.create(p); 
 

 
console.log(p.answer);     // 42 
 
console.log(p.hasOwnProperty("answer")); // true 
 
console.log(o.answer);     // 42 
 
console.log(o.hasOwnProperty("answer")); // false 
 

 
delete o.answer;       // No effect 
 
console.log(p.answer);     // 42 
 
console.log(o.answer);     // 42 
 

 
delete p.answer;       // Removes it from p 
 
console.log(p.answer);     // undefined 
 
console.log(o.answer);     // undefined
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
}