过滤器的底层原理

function resoLveAsset(options, type, id, warnMissing) {

    if (typeof (id) !== 'string') {

        return;

    }

    const assets = options[type];

    if (hasOwn(assets, id)) return assets[id];

    const camelizedId = camelize(id);

    if (hasOwn(assets, camelizedId)) return assets[camelizedId];

    const PascalCaseId = capitlize(camelizedId);

    if (hasOwn(assets, PascalCaseId)) return assets[PascalCaseId];

    // const res assets[id] || assets[camelizedId]||PascalCaseId

    if(process.env.NODE_ENV!=='production'&& warnMissing&&!res){

        warn('Fail to resolve' + type.slice(0,-1)+':'+id, options);

    }

    return res;

}

  • 判断过滤器id是否为字符串,不是则终止
  • 用assets存储过滤器
  • hasOwn函数检查assets自身是否存在id属性,存在则返回
  • hasOwn函数检查assets自身是否存在驼峰化后的id属性,存在则返回
  • hasOwn函数检查assets自身是否存在将首字母大写后的id属性,存在则返回
  • 如果还是没有,就是去原型链找,找不到就会打印警告

过滤器的原理其实很简单,无非就是在编译阶段就把过滤器编译成函数进行调用,串联的过滤器就是嵌套调用。关于编译成函数的时候就是利用vue的内部函数parseFilters,解析过滤器列表并进行拼接字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼程序员

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值