javascript - 这个函数封装的有意义吗?~
伊谢尔伦
伊谢尔伦 2017-04-11 11:52:15
[JavaScript讨论组]

这是原始状态

封装后判断是这样的

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

还是有意义、比如你的formName变量名改了、你只需要改动一处就可以了、不然要每行都改、

再比如、你传进来的name要根据规则做个字符串拼接、也只需要改一处、

函数的封装是为了维护方便、前期多花功夫是为了后面不让自己难受、希望可以帮到你

天蓬老师

下次多个字段岂不是又要加一句 else if?

试着把检验的字段和返回的信息抽离出来, 是否更好一点?
如下(未测试代码正确性):

var fields = {
    name: {
        required: '请输入公司名称'
    },
    principalEmail: {
        email: '请输入正确的负责人邮箱'
    }
};
function check(formName) {
    var i, ii, field;
    for(i in fields) {
        if(fields.hasOwnProperty(i)) {
            field = fields[i];
            for(ii in field) {
                if(field.hasOwnProperty(ii)) {
                    if(formName[i] && formName[i].$error.[ii]) {
                        return formName[i].$error.[ii];
                    }
                }
            }
        }
    }
    return null;
}

var tips = check(formName);
if(tips) {
    promptLayer({str: tips});
} else {
    addMember.addMember();
}
黄舟

没意义。 有了封装的意识, 但是没做好。
我会这样写:

// 代码没有仔细写,有点乱,不过应该不影响理解。
// 数据
const check = {
    name: [{
        msg: '请输入公司名称',
        checkItem: 'required'
    }],
    principalEmail: [{
        msg: '请输入负责人的邮箱',
        checkItem: 'required'
    }, {
        msg: '请输入正确的负责人的邮箱',
        checkItem: 'email'
    }]
};

// 逻辑
for(var k in check) {
    for(var i = 0, len = check[k].length; i < len; i++) {
        if(formName[k].$error[check[k][i].checkItem]) {
            promptLayer({str: check[k][i].msg});
        }
    }
}

为什么这样写呢?
程序由逻辑和数据组成,所以,要把数据和逻辑分开来。
按照我的代码, 如果验证项需要修改,只要改数据就好了。逻辑只要测过一遍,就可以保证正确(还可以使用单元测试来保证正确)。
还有就是,逻辑可以被不同业务所复用,只要传入对应业务的数据就好。

大家讲道理

封装有意义, 如果check的条件改动只需要改check函数一处。

不过还可以进一步改。


const actions = [
  ['name', '公司名称'],
  ['principal', '负责人']
  // ... 其他数据
]

let match = false
for (let i = 0; i < actions.length; i++) {
  match = check(actions[i][0])
  if (match) {
    promptLayer(actions[i][1])
    break
  }
}

if (!match) {
    addMember.addMember()
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号