装饰器
1.方法装饰器
(1)节流防抖
import { throttle, debounce } from 'lodash'
// 节流 export const throttle = function(wait, options = {}) { return function(target, name, descriptor) { descriptor.value = throttle(descriptor.value, wait, options) } }
// 防抖 export const debounde = function(wait, options = {}) { return function(target, name, descriptor) { descriptor.value = debounde (descriptor.value, wait, options) } }
(2)Loading
import { Toast } from 'vant' export const loading = function(message = '加载中...', errorFn = function() {}) { return function(target, name, descriptor){ const fn = descriptor.value descriptor.value = async function(...rest){ const loading = Toast.loading({ message: message, forbidClick: true }) try{ return await fn.call(this, ...rest) }catch(e){ errorFn && errorFn.call(this, error, ...rest) console.error(error) }finally{ loading.clear() } } } }
(3)确认框
import { Dialog } from 'vant' export function confirm(message = '确定要删除数据,此操作不可回退。',title = '提示',cancelFn = function() { return function(target, name, descriptor){ const originFn = descriptor.value descriptor.value = async function(...rest) { try{ await Dialog..confirm({ message, title: title }) originFn.apply(this, rest) }catch(e){ cancelFn && cancelFn(error) } } } }
2.类装饰器
// 这个是要混入的对象 const methods = { logger() { console.log('记录日志') } }
function mixins(obj) { return function (target) { Object.assign(target.prototype, obj) } } // 这个是一个登陆登出类 @mixins(methods) class Login{ login() {} logout() {} }