在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. 

我希望它有帮助。