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?
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?
ECMAScript5 を使用すると、次のことを実現できます。
var foo = {};
Object.defineProperty(foo, 'x', {
value: 7,
writable: false,
configurable: false,
enumerable: true
});
ECMAScript5 用のMDN JavaScriptをチェックしてみてください。
これがあなたが探しているものだと思います。書き込み可能な属性の下の例を確認してください
ただし、 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...
Object.definePropertyを使用してこれを行うことができます。
Object.defineProperty(foo, "x", {writable:false})
オブジェクト全体を書き込み不可にしたい場合は、オブジェクトのフリーズメソッドを使用することもできます。
Object.freeze(foo);
これは、John Resig による素晴らしいブログ投稿です。読み取り専用で構成可能で拡張可能な属性に注意してください。
http://ejohn.org/blog/ecmascript-5-objects-and-properties/ :