如何定义接收配置与onSuccess/onError回调的JavaScript类
符合要求的完整实现
class User { constructor(params) { // 合并默认配置和用户传入配置,回调默认是空函数避免调用报错 const defaultOptions = { onSuccess: () => {}, onError: () => {} } Object.assign(this, defaultOptions, params) } static create(params) { return new User(params) } showForm() { try { // 此处填写showForm实际业务逻辑,比如渲染表单、参数校验等 console.log(`展示用户表单:姓名${this.name},邮箱${this.email},年龄${this.age}`) // 逻辑执行成功,触发成功回调,可传入自定义返回值 this.onSuccess({ code: 200, msg: '表单展示成功', userInfo: { name: this.name, email: this.email, age: this.age } }) } catch (err) { // 逻辑执行报错,触发失败回调,传入错误信息 this.onError({ code: 500, msg: '表单展示失败', error: err }) } } }
实现说明
- 构造函数内先定义了回调的默认空函数,就算用户调用时没有传入
onSuccess/onError,执行时也不会出现「函数未定义」的报错 - 用
Object.assign把所有传入的业务参数、回调都直接挂载到实例上,不需要额外单独存储params对象,调用更方便 showForm等实例方法内部完成业务逻辑后,直接调用this.onSuccess/this.onError就能触发用户传入的自定义回调,支持传入任意响应参数给回调使用
调用测试
按你提供的写法调用即可正常触发回调:
let user = User.create({ name: 'name_here', email: 'user@email.com', age: 37, onSuccess: (response) => { alert("onSuccess: " + response.msg); }, onError: (error) => { alert("error: " + error.msg); } }) // 调用后会先打印表单信息,然后弹出onSuccess的提示 user.showForm()
可选优化点
- 可以在构造函数内增加必填参数校验,比如判断
name/email是否为空,不符合要求直接抛出错误触发onError - 如果有多个实例方法需要触发回调,统一封装一个触发回调的工具方法,避免重复写判断逻辑
内容的提问来源于stack exchange,提问作者Adedeji Sikiru Da Webcoded
相关产品推荐
相关产品推荐

