js对象常量定义函数&&链模式(笔记)

2018-05-04  本文已影响34人  张延伟
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

优点: 创建简洁的代码,使得代码优美;可以帮助分割函数,创建更加简洁具有特定功能的函数,而不创建太多功能函数,长远来看,提高了代码的课维护性。
缺点: 调试困难,当链中多个方法的其中一个出现错误,无法知道哪一个方法错误。

上一篇 下一篇

猜你喜欢

热点阅读