Maison  >  Questions et réponses  >  le corps du texte

Après avoir scellé l'objet avec Object.seal() dans es5, les propriétés du prototype d'objet peuvent-elles être modifiées ?

L'explication de

mdn est la suivante

La traduction dit que cela n'affecte pas les attributs hérités du prototype, mais la valeur de l'attribut __proto__ ne peut pas être modifiée. Ensuite, je l'ai testé moi-même et j'ai découvert que le prototype pouvait être supprimé et modifié après avoir scellé l'objet, puis je l'ai testé. Je n'ai pas compris l'expression de cette phrase. Est-elle exacte ? . .
Le code est le suivant

let obj_origin, obj_changed;

        function Person() {
            this.name = 'sheng';
            this.age = '25';
        }

        Person.prototype = {
            constructor: Person,
            sing () {
                alert('sing');
            },
            prototypeTarget:'prototypeTarget'
        };

        obj_origin = new Person();

        obj_changed = Object.seal(obj_origin);

        delete obj_changed.name;

        delete obj_changed.__proto__.prototypeTarget;

        console.log(obj_changed);


L'attribut prototypeTarget sur le prototype a été supprimé

漂亮男人漂亮男人2688 Il y a quelques jours893

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-06-10 09:51:20

    Normalement, un objet est extensible (de nouvelles propriétés peuvent être ajoutées). Le scellement d'un objet rend impossible l'ajout de nouvelles propriétés et toutes les propriétés existantes deviennent non configurables. L'effet d'une propriété non configurable est qu'elle devient non supprimable et qu'une propriété de données ne peut pas être redéfinie en tant que propriété d'accesseur, ou vice versa. Mais la valeur du bien peut encore être modifiée. Toute tentative de suppression d'une propriété d'un objet scellé ou de conversion d'une propriété d'un objet scellé d'une propriété de données en propriété d'accesseur échouera silencieusement ou lèvera une exception TypeError (mode strict).

    N'affecte pas les propriétés héritées de la chaîne de prototypes. Mais la valeur de l'attribut proto ne peut pas être modifiée.

    Les informations proviennent de : https://developer.mozilla.org...

    répondre
    0
  • 巴扎黑

    巴扎黑2017-06-10 09:51:20

    _proto_ est une propriété privée interne, pas une propriété prototype

    Pour plus de détails, veuillez lire https://developer.mozilla.org...

    répondre
    0
  • Annulerrépondre