6
votes

Pourquoi la valeur de la propriété de la longueur de la matrice change-t-elle même lorsqu'elle est définie en lecture seule dans JavaScript?

J'ai essayé le code suivant dans la console de chrome xxx pré>

ceci montre la longueur de 4 comme prévu. Maintenant, j'ai essayé de définir la propriété de longueur aussi écritable: FALSE P>

Object.defineProperty(a, "length", {writable: false});
a[4] = 5;
a.length


0 commentaires

3 Réponses :


5
votes

objet.defineproperty (a, "longueur", {Enrichie: false}); n'affecte que la manière que vous attribuez la valeur directement à la propriété . < Pré> xxx


0 commentaires

2
votes

Le L'écriture écrite code> ne limite que l'utilisation d'opérateurs d'affectation forts> à cette propriété elle-même forte>. En outre, La valeur par défaut de L'écriture écrite code> est déjà false code> strong>.

Par exemple: p>

x = [1,2,3,4];   # x.length is 4
y = x.length;    # y is 4
x = [1,2,3,4,5]  # x.length is now 5, but y is still 4


1 commentaires

Je suppose que vous voulez dire que la valeur par défaut de "Entrescriptions" est false pour la propriété de longueur d'un tableau. La longueur de votre exemple est également 4 et reste 4 non 5.



0
votes

Cela dépend aussi de ce que réellement la longueur code> retourne la propriété. Voir l'exemple suivant

var MyObject = function(){
    var _count = 0;
    this.increment = function(){
        _count++;
    } 
    this.getCount = function(){
        return _count;
    } 
};

var object = new MyObject();

Object.defineProperty(object, "count", {   // new property `count` calls `getCount`
    writeable:false,
    get: function(){
        return this.getCount();  
    }
});


alert(object.count);  // 0
object.count = 90;
object.increment();
alert(object.count);  // 1
object.count = 100;
object.increment();  
alert(object.count); //2


0 commentaires