var constant = (function() {
var constants = {}, //存储已经定义过的属性
ownProp = Object.prototype.hasOwnProperty, //检查对象属性是否存在
allowned = { //允许定义的常量值数据类型
string: 1,
number: 1,
boolean: 1
},
prefix = (Math.random() + '_').slice(2); //给定义的常量值检测添加的随机值,保证声明的常量值不会与内置属性冲突
return {
//检测定义的常量值是否存在
isDefined: function(name) {
return ownProp.call(constants, prefix + name);
},
//定义常量值
set: function(name, value) {
if(this.isDefined(name)) {return false;}
if(!ownProp.call(allowned, typeof value)) {return false;}
constants[prefix + name] = value;
return true;
},
//获取常量值
get: function(name) {
if(this.isDefined(name)) {
//如果定义了就返回
return constants[prefix + name];
}
return null;
}
}
})();
constant.isDefined('maxwidth')
false
constant.set('maxwidth', 480)
true
constant.isDefined('maxwidth')
true
链模式可以一个接一个的调用对象的方法。当创建的方法返回的是无任何意义的值时,可以使他们返回this(正在调用的对象的实例)。
var obj = {
value: 1,
increment: function() {
this.value += 1;
return this;
},
add: function(v) {
this.value += v;
return this;
},
shou: function() {
alert(this.value);
}
}
obj.increment().add(3).shou(); //5
优点: 创建简洁的代码,使得代码优美;可以帮助分割函数,创建更加简洁具有特定功能的函数,而不创建太多功能函数,长远来看,提高了代码的课维护性。
缺点: 调试困难,当链中多个方法的其中一个出现错误,无法知道哪一个方法错误。