Javascript设置对象属性为"只读"
有时为了保护某些属性,让其无法被更改,我们会把他们设置为常量。
在某些语言里面,也许会用const来实现这样的功能。本文讲述如何在Javascript中实现这样的功能。
方法一:
var myObject = {
get readOnlyProperty() { return 1024; }
}; alert(myObject.readOnlyProperty); //
myObject.readOnlyProperty = ; // 可以设置,但不管用
alert(myObject.readOnlyProperty); //
如果你已经定义好了一个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')); // CONFIG.MY_CONST = '2';
alert(CONFIG.get('MY_CONST')); // CONFIG.private.MY_CONST = '2'; // 错误,没有private属性
alert(CONFIG.get('MY_CONST')); //
这个方法兼容目前全部浏览器(包括IE),只是读属性的时候需要使用get。
方法四:
在大部分情况下,你并不需要完全控制变量不可写。在业内有个约定,就是使用全大写的字母来表示常量(只读变量)。这是最简单,最好的方法。
var MY_CONSTANT = "some-value";
这样写,来告诉自己,这个变量不可以改变!!!
总结:
我个人比较推荐最后一种做法。简单明了,约定 也是解决很多问题的最好方法。
其次是方法三,模块模式是比较好的模式,而且这种方法兼容性良好,因为我想大部分人用Javascript都是需要在IE上运行的。
第二种方法是标准方法,如果以后Javascript解释器都支持ECMAScript 5的话。
本文参考:stackoverflow.com
Javascript设置对象属性为"只读"的更多相关文章
- Python面向对象基础:设置对象属性
用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构.当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性.在这一点上,它和其它语言的struct ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- C#通过属性名字符串获取、设置对象属性值
之前理工项目从这个博客找到了相对应的方法:C#通过属性名字符串获取.设置对象属性值 https://www.cnblogs.com/willingtolove/p/12198871.html
- JavaScript 操作对象属性(设置属性, setter/getter, 序列化)
参考自<<JavaScript权威指南 第6版>>, 文字太多反而不易理清其中的关系, 直接上代码和注释 /* * 对象的setter和getter属性: * 定义为一个或者两 ...
- javascript window对象属性和方法
window对象 window对象表示一个浏览器窗口或一个框架.在客户端JavaScript中,window对象是全局对象,所有的表达式 都在当前的环境中计算.也就是说,要引用当前窗口根本不需要特殊的 ...
- JavaScript原生对象属性和方法详解——Array对象
http://www.feeldesignstudio.com/2013/09/native-javascript-object-properties-and-methods-array/ lengt ...
- javascript中对象属性的介绍
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript 之 对象属性的特性 和defineProperty方法
对象是无序属性的集合,而这些属性在创建是都带有一些特征值(可以理解为属性的属性,天生自带的),这些特征值是为了实现JavaScript引擎用的,因此JavaScript不能直接访问. JavaScri ...
- JavaScript Window对象属性
window 代表浏览器中一个打开的窗口. Window的属性 属性 描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dia ...
随机推荐
- 【转载】 mysql explain用法
转载链接: mysql explain用法 官网说明: http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数: htt ...
- EF不能很好的支持DDD?估计是我们搞错了!
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:最近在ABP项目中尝试纯粹的DDD,然后遇到EF实现的Repository似乎不能很好 ...
- 优化Linux内核参数
转自:http://www.centoscn.com/CentOS/config/2013/0804/992.html vim /etc/sysctl.conf 1.net.ipv4.tcp_max_ ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- Android 利用ImageView显示图片
Author: Maddock Date: 2015-07-21 因为做算法demo的需要,开发一点安卓的程序. 需求:获取UI中图像中某点的坐标. 参考:http://longshuai2007.b ...
- fragment嵌套问题
fragment嵌套里面不能用再用getActivity().getFragmentManager()要用getChildFragmentManager()
- 网络神器Greasemonkey(油猴子)使用方法简介+脚本分享【转载】
推荐下,觉得这个方法有用, 今天艾薇百科来介绍一下功能强大的Greasemonkey,俗称"油猴子",Greasemonkey可以自由定制网页,实现你想要的各种功能.堪称" ...
- 转:看看 Delphi XE2 为 VCL 提供的 14 种样式
http://www.linuxso.com/linuxbiancheng/8889.html 其实只提供了 个 vsf 样式文件, 还有默认的 Windows 样式, 共 种. 在空白窗体上添加 L ...
- Linux 利用lsof命令恢复删除的文件
lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需 ...
- iOS CoreData primitive accessor
Given an entity with an attribute firstName, Core Data automatically generates firstName, setFirstNa ...