完整代码(https://github.com/mfaying/si...filter原理概述{{message|capitalize}}filter在模板编译阶段会编译成如下_s(_f("capitalize")(message))_f是resolveFilter的别名,它的作用是从this.$options.filters中找出注册的filter并返回。concatenatedfilterconcatenatedfilter会编译成_s(_f("suffix")(_f("capitalize")(message)))接收到的参数会被编译成_s(_f("suffix")(_f("capitalize")(message),'!'))resolveFilter函数的内部原理resolveFilter(id){returnresolveAsset(this.$options,"filters",id,true)||identity;}constidentity=_=>_;functionresolveAsset(options,type,id,warnMissing){if(typeofid!=="string"){return;}constassets=options[type];//首先检查本地注册表更改if(hasOwn(assets,id))returnasserts[id];constcamelizedId=camelize(id);if(hasOwn(assets,camelizedId))返回资产[camelizedId];constPascalCaseId=capitalize(camelizedId);如果(hasOwn(资产,PascalCaseId))返回资产[PascalCaseId];//检查原型链constres=assets[id]||资产[camelizedId]||资产[PascalCaseId];如果(process.env.NODE_ENV!==“生产”&&warnMissing&&!res){警告("");}returnres;}解析过滤器functionparseFilter(exp){letfilters=exp.split("|");让表达式=filters.shift().trim();让我;if(fliters){for(i=0;i
