虽然许多编程语言提供了const关键字来支持常量的声明,但JavaScript里没有表示常量的语义。我们可以用全大写的方式来声明变量,表明它实际上是个常量:

Math.PI; // 3.141592653589793
Math.SQRT2; // 1.4142135623730951
Number.MAX_VALUE; // 1.7976931348623157e+308
通常这种常量会用对象来包装起来:比如上面的Math。要实现程序里需要的常量,可以这样做:
// constructor
var Widget = function () {
// implementation...
};
// constants
Widget.MAX_HEIGHT = 320;
Widget.MAX_WIDTH = 480;
同样的思路,可以使通过字面声明方式创建的对象也可以有全大写的属性。但上面的实现并不能阻止用户改变“常量”(实际上是变量)的值。为了解决这一问题,可以声明一个专门保存常量的对象,比如叫consot,并通过下面的3个方法来统一提供常量的定义与值的获取:
  • set(name, value) 定义一个名为name的常量,值为value;
  • isDefined(name) 检查一个名为name的常量有没有被定义;
  • get(name) 得到名为name的常量的值
在下面的const实现中,只支持简单类型的常量数据。通过hasOwnProperty() 来检查数据类型是否可用,以及常量是否已经被定义:
var constant = (function () {
var constants = {},
ownProp = Object.prototype.hasOwnProperty,
allowed = {
string: 1,
number: 1,
boolean: 1
},
prefix = (Math.random() + "_").slice(2);
return {
set: function (name, value) {
if (this.isDefined(name)) {
return false;
}
if (!ownProp.call(allowed, typeof value)) {
return false;
}
constants[prefix + name] = value;
return true;
},
isDefined: function (name) {
return ownProp.call(constants, prefix + name);
},
get: function (name) {
if (this.isDefined(name)) {
return constants[prefix + name];
}
return null;
}
};
}());
检查这个实现:
// check if defined
constant.isDefined("maxwidth"); // false
// define
constant.set("maxwidth", 480); // true
// check again
constant.isDefined("maxwidth"); // true
// attempt to redefine
constant.set("maxwidth", 320); // false
// is the value still intact?
constant.get("maxwidth"); // 480

最新文章

  1. PAT——乙级真题1003代码
  2. 如何定位死循环或高CPU使用率(linux)
  3. LoadRunner 12.02 安装以及汉化教程
  4. VMware vSphere 5.1 简介与安装
  5. Ubuntu 下安装 apt-get install npm 失败的解决方案
  6. VIM如何将全部内容复制并粘贴到外部
  7. POJ 2140
  8. C# 编写Window服务基础(一)
  9. 简单的完全背包HDU1114
  10. MVC架构学习
  11. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放
  12. 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
  13. PIE使用阴影后的背景透明方法
  14. Markdown: 编译pdf
  15. org.apache.maven.archiver.MavenArchiver.getManifest
  16. 加载hive-jdbc driver时报错:java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
  17. .NET 常用ORM之NHibernate
  18. 用Nodejs连接MySQL
  19. Units in Android
  20. 第7月第25天 xcode bundle calayer动画

热门文章

  1. JavaSE (五)面向对象 -- 概述
  2. Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)
  3. Java实现 LeetCode 433 最小基因变化
  4. Java实现 蓝桥杯VIP 算法训练 薪水计算
  5. Java实现 蓝桥杯 一步之遥
  6. Java实现UVA10131越大越聪明(蓝桥杯每周一题)
  7. Java实现 蓝桥杯 算法提高 字符串压缩
  8. java实现平面4点最小距离
  9. Centos宝塔安装NextCloud
  10. lambda表达式操作DataTable番外篇