PRinciple
// constructorvar Widget = function () { // implementation...};// constantsWidget.MAX_HEIGHT = 320;Widget.MAX_WIDTH = 480;
set(name, value) // To define a new constantisDefined(name) // To check whether a constant existsget(name) // To get the value of a constant
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; } };}());
Testing the implementation:
// check if definedconstant.isDefined("maxwidth"); // false// defineconstant.set("maxwidth", 480); // true// check againconstant.isDefined("maxwidth"); // true// attempt to redefineconstant.set("maxwidth", 320); // false// is the value still intact?constant.get("maxwidth"); // 480
References:
Javascript Patterns -by Stoyan Stefanov(O`Reilly)
新闻热点
疑难解答