小编典典

可以在纯JavaScript中实现只读属性吗?

javascript

查看mozilla文档,查看正则表达式示例(标题为“使用匹配结果创建数组”),我们有如下语句:

输入:一个只读属性,它反映与正则表达式匹配的原始字符串。

index:只读属性,它是字符串中匹配项的从零开始的索引。

等等…是否可以在JavaScript中创建具有只读属性的对象,或者这是对特定浏览器实现的内置类型的特权?


阅读 265

收藏
2020-05-01

共1个答案

小编典典

编辑: 自从编写了此答案以来Object.defineProperty,EcmaScript
5中已经标准化了一种新的更好的使用方式,并在较新的浏览器中提供了支持。如果需要支持“较旧的”浏览器,则可以使用此答案中的一种方法作为备用。


在Firefox,Opera 9.5+和Safari3+,Chrome和IE(已通过v11测试)中,您可以定义getter和setter属性。如果仅定义一个吸气剂,它将有效地创建一个只读属性。您可以使用对象文字或在对象上调用方法来定义它们。

var myObject = {
    get readOnlyProperty() { return 42; }
};

alert(myObject.readOnlyProperty); // 42
myObject.readOnlyProperty = 5;    // Assignment is allowed, but doesn't do anything
alert(myObject.readOnlyProperty); // 42

如果已经有一个对象,则可以调用__defineGetter____defineSetter__

var myObject = {};
myObject.__defineGetter__("readOnlyProperty", function() { return 42; });

当然,这在网络上并没有真正的用处,因为它在Internet Explorer中不起作用。

2020-05-01