在JavaScript中定义只读属性
给定一个对象obj
,我想定义一个只读属性'prop'
,并将其值设置为val
。 这是正确的方法来做到这一点?
Object.defineProperty( obj, 'prop', { get: function () { return val; } });
结果应该是(对于val = 'test'
):
obj.prop; // 'test' obj.prop = 'changed'; obj.prop; // still 'test' since it's read-only
此方法工程btw: http : //jsfiddle.net/GHMjN/
我只是不确定这是否是最简单/最平滑/最正确的方式来做到这一点…
您可以改为使用属性描述符的writable
属性,从而防止需要get
访问器:
var obj = {}; Object.defineProperty(obj, "prop", { value: "test", writable: false });
这是ECMAScript 5,所以在旧版浏览器中无法使用。
由于旧的浏览器(向后兼容性),我不得不拿出属性的访问函数。 我把它做成了bob.js的一部分:
var obj = { }; //declare read-only property. bob.prop.namedProp(obj, 'name', 'Bob', true); //declare read-write property. bob.prop.namedProp(obj, 'age', 1); //get values of properties. console.log(bob.string.formatString('{0} is {1} years old.', obj.get_name(), obj.get_age())); //set value of read-write property. obj.set_age(2); console.log(bob.string.formatString('Now {0} is {1} years old.', obj.get_name(), obj.get_age())); //cannot set read-only property of obj. Next line would throw an error. // obj.set_name('Rob'); //Output: //======== // Bob is 1 years old. // Now Bob is 2 years old.
我希望它有帮助。