1

I'd like to be able to do something like

foo.x = 7;

And then do something to make that property read only so that no other code can change it. IE i'd like

foo.x = 10; //should do nothing

To do nothing is there anyway to do that in JS?

4

5 に答える 5

4

ECMAScript5 を使用すると、次のことを実現できます。

var foo = {};

Object.defineProperty(foo, 'x', {
    value: 7,
    writable: false,
    configurable: false,
    enumerable: true
});

ECMAScript5 用のMDN JavaScriptをチェックしてみてください。

于 2012-10-04T15:40:07.043 に答える
1

これがあなたが探しているものだと思います。書き込み可能な属性の下の例を確認してください

ただし、 ECMA5サポートを提供するブラウザーでのみ機能します。古いブラウザーの場合、書き込み不可のプロパティを定義することはできませんが、 getterで使用できるプライベート変数を設定できます

var foo = (function(x)
{
    var getX = function()
    {
        return x;
    };
    getX.valueOf = function()
    {
        return this();
    };
    return {x:x,getX:getX};
})(7);//pass constant value
foo.x === 7;//true
foo.x = 5;//will work
//BUT:
foo.getX();//returns 7, always
foo.getX;//returns 7, so can be used as though it weren't a method
//WARNING:
foo.getX = 213;//x is lost forever...
于 2012-10-04T15:37:30.243 に答える
0

Object.definePropertyを使用してこれを行うことができます。

Object.defineProperty(foo, "x", {writable:false})

このフィドルを参照してください

オブジェクト全体を書き込み不可にしたい場合は、オブジェクトのフリーズメソッドを使用することもできます。

Object.freeze(foo);

于 2012-10-04T15:43:39.197 に答える
0

これは、John Resig による素晴らしいブログ投稿です。読み取り専用で構成可能で拡張可能な属性に注意してください。

http://ejohn.org/blog/ecmascript-5-objects-and-properties/ :

于 2012-10-04T15:45:24.307 に答える