博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript设置对象属性为"只读"
阅读量:5127 次
发布时间:2019-06-13

本文共 1655 字,大约阅读时间需要 5 分钟。

有时为了保护某些属性,让其无法被更改,我们会把他们设置为常量。

在某些语言里面,也许会用const来实现这样的功能。本文讲述如何在Javascript中实现这样的功能。

 

方法一:

var myObject = {    get readOnlyProperty() { return 1024; }};alert(myObject.readOnlyProperty); // 1024myObject.readOnlyProperty = 5;    // 可以设置,但不管用alert(myObject.readOnlyProperty); // 1024

如果你已经定义好了一个Object,那么你可以这么做

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

上面的这两段代码兼容Firefox,Opera 9.5+, Safari 3+和Chrom,不过杯具的是,这些代码是不兼容IE的。

 

方法二:

对于支持ECMAScript 5的Javascript解释器,你可以使用Object.defineProperty方法来实现这样的功能。

在松散模式,Javascript解释器会直接忽略掉属性的写入。在严格模式(strict mode)下,解释器会抛出一个错误。

var obj = {};Object.defineProperty( obj, "
<属性名>
", { value: "
<属性值>
", writable: false, enumerable: true, configurable: true});

不过很明显,这代码是无法在那些不支持ECMAScript 5的浏览器(当然包括IE)上执行的。

 

方法三:

使用模块模式去模拟出这样的功能,不废话,直接看代码

var CONFIG = (function() {     var private = {         'MY_CONST': '1',         'ANOTHER_CONST': '2'     };       return {        get: function(name) { return private[name]; } //函数返回一个对象,有get方法,接收name参数,返回内部私有变量的值    }; })();alert(CONFIG.get('MY_CONST'));  // 1CONFIG.MY_CONST = '2';alert(CONFIG.get('MY_CONST'));  // 1CONFIG.private.MY_CONST = '2';                 // 错误,没有private属性alert(CONFIG.get('MY_CONST'));  // 1

这个方法兼容目前全部浏览器(包括IE),只是读属性的时候需要使用get。

 

方法四:

在大部分情况下,你并不需要完全控制变量不可写。在业内有个约定,就是使用全大写的字母来表示常量(只读变量)。这是最简单,最好的方法。

var MY_CONSTANT = "some-value";

这样写,来告诉自己,这个变量不可以改变!!!

 

总结:

我个人比较推荐最后一种做法。简单明了,约定 也是解决很多问题的最好方法。

其次是方法三,模块模式是比较好的模式,而且这种方法兼容性良好,因为我想大部分人用Javascript都是需要在IE上运行的。

第二种方法是标准方法,如果以后Javascript解释器都支持ECMAScript 5的话。

 

本文参考:stackoverflow.com

转载于:https://www.cnblogs.com/season-huang/p/seasonhuang.html

你可能感兴趣的文章
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>