6

Chromeのコンソールで次のコードを試しました

var a = new Array(1,2,3,4);
a.length

これは、予想どおり長さが 4 であることを示しています。ここで、長さプロパティを書き込み可能として設定しようとしました: false

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

プロパティが writable:false に設定されていても、結果は 5 になります。どうしてこうなりました?read-only(writable:false)のままでいいのではないでしょうか?

4

3 に答える 3

0

lengthまた、実際にプロパティが返すものにも依存します。次の例を参照してください

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

プロパティを作成するread-onlyということは、それに値を割り当てることができないことを意味します。同時に、プロパティが読み取られたときに返される内容は変更されません。そのプロパティの内部定義に依存します。

于 2013-06-06T09:35:26.787 に答える