javascript - js:哪种方式更好?
PHP中文网
PHP中文网 2017-04-10 13:11:44
0
3
465

我包装了一个方法,需要传入一些参数(比较多,有二十个左右,但不是每个都必须的),我的想法是包装一下传入,包装函数:

var conf = {
    a: 'aaa',
    b: 'bbb',
    c: 'ccc'
}

初始化函数:

function init(obj, conf){
    for (var p in conf) {
        obj[p] = conf[p];
    }
}

问题是,下面两种定义方式,哪一种比较好?

第一种:

function jamo(conf){
    this.a= 'AAA';
    this.b= 'BBB';
    this.c= 'CCC';
    init(this, conf);
}

第二种:

function jamo(conf){
    var C = {
        a: 'default value',   
        b: 'default value',
        c: 'default value'
    };
    init(C, conf);
}

或者有更好的方案?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답(3)
小葫芦

T_T,不懂怎么写sg的换行,双空格没用。

第一个,没有上下文,没有运行环境,普通模式无所谓的正确和错误,严格模式下出错。但是如果你这样用的话,jamo作为一个对象的话可读性就更好了。
如果直接调用 jamo(conf),按照第一种写法,window出现三个全局变量了。
下面是对象模式的写法,非最好的对象编写方法,更优写法可参阅coffeescript的写法。

function Jamo(conf){
    this.a= 'AAA';
    this.b= 'BBB';
    this.c= 'CCC';
    function init(obj, conf){
        for (var p in conf) {
            obj[p] = conf[p];
        }
    }
    init(this, conf);
}
var conf = {
    a: 'aaa',
    b: 'bbb',
    c: 'ccc'
}
var jamo = new Jamo(conf);

第二种的话,是一般对象的拓展方式,但是init方法需要返回值,修改为

function init(obj, conf){
    for (var p in conf) {
        obj[p] = conf[p];
    }
    return obj;
}

但是,基本上没什么用途,我猜测下你的想法:
设置一个参数 conf 对象,这个参数有默认的值,如果传递的参数的部分必须存在的字段不存在,就还原为默认值。看下面。

//默认配置信息
var conf = {
    a: 'aaa',
    b: 'bbb',
    c: 'ccc'
}
function init(obj, conf){
    // conf 为默认配置,obj为用户配置,obj中已配置项不应被覆盖。
    for (var p in conf) {
        obj[p] = obj[p] || conf[p];
    }
    return obj;
}
var conf1 = {
    e: 'eee',
    a: 'AAA',
}
conf1 = init(conf1,conf);
/*
结果为
conf1 = {
    e: 'eee',
    a: 'AAA',
    b: 'bbb',
    c: 'ccc'
}  
*/
迷茫

你的两个方案,第二个那种会比较好一点。
第一个的this没有其他东西的话……不是全局变量(大概是window?)吗……

-

js下应该没有更舒服的做法了吧 = ?我不是很确定
coffee的话可以写的很舒服,编译出来也差不多吧。。

大家讲道理

你可以试试最近Github上风头正劲的 http://autographer.github.io/args.js/

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿