如何处理对象内联函数的错误并简化验证代码调用
实现无try-catch的链式验证调用
核心思路
不再通过抛出错误终止验证,而是在验证对象内部维护一个有效性状态标记,每个验证方法仅在当前状态有效时执行检查,失败则标记为无效,始终返回自身以支持链式调用。最后通过重写valueOf方法,让验证对象在被转为布尔值时直接返回有效性状态。
修改后的验证函数
const checkText = (t) => ({ _valid: true, isNotEmpty: function () { // 仅当前有效时才执行检查 if (this._valid && t.length === 0) { this._valid = false; } return this; }, isEmail: function () { const emailRegex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,20})+$/; if (this._valid && !emailRegex.test(t)) { this._valid = false; } return this; }, // 重写valueOf,转为布尔值时返回有效性状态 valueOf: function () { return this._valid; } });
一行式调用方式
// 使用!!强制转为布尔值 const isFieldValid = !!checkText('valid@example.com').isNotEmpty().isEmail(); // 或使用Boolean()转换 const isFieldValid2 = Boolean(checkText('').isNotEmpty().isEmail());
说明
- 每个验证方法都会先检查当前
_valid状态,已失效的情况下不会重复执行检查,提升效率。 - 链式调用始终返回验证对象本身,保持调用的连贯性。
- 通过
valueOf方法的重写,让验证对象可以直接被转为布尔值,实现一行式的结果获取。
内容的提问来源于stack exchange,提问作者user2631621
相关产品推荐
相关产品推荐

