编辑: 自从编写了此答案以来
Object.defineProperty,Ecmascript
5中已经标准化了一种新的更好的使用方式,并在较新的浏览器中提供了支持。如果需要支持“较旧的”浏览器,则可以使用此答案中的一种方法作为备用。
在Firefox,Opera 9.5+和Safari3+,Chrome和IE(已通过v11测试)中,您可以定义getter和setter属性。如果仅定义一个吸气剂,它将有效地创建一个只读属性。您可以使用对象文字或在对象上调用方法来定义它们。
var myObject = { get readonlyProperty() { return 42; }};alert(myObject.readOnlyProperty); // 42myObject.readonlyProperty = 5; // Assignment is allowed, but doesn't do anythingalert(myObject.readOnlyProperty); // 42如果已经有一个对象,则可以调用
__defineGetter__和
__defineSetter__:
var myObject = {};myObject.__defineGetter__("readOnlyProperty", function() { return 42; });当然,这在网络上并没有真正的用处,因为它在Internet Explorer中不起作用。



