当前位置:Gxlcms > JavaScript > 浅析Prototype的模板类Template_prototype

浅析Prototype的模板类Template_prototype

时间:2021-07-01 10:21:17 帮助过:11人阅读

用过Prototype的人都知道,里面有个类叫做Template,用法示例如下:
代码如下:

var str = '#{what} may have gone, but there is a time of #{how}';
var object = {
what : 'Swallows',
how : 'return'
}
var template_1 = new Template(str);
var result = template_1.evaluate(object);

console.log('result:',result);
//输出:'Swallows may have gone, but there is a time of return'

这么挺方便的,所以下面就简单的分析一下实现原理,也算是源码解读的一个笔记。

我们先看一下一般需求里面会用到的一些情况,还是用上面的例子,先决定我们的形式,替换的部分是形如#{what}的内容,其中what是一个object对象的一个关键字。
现在有个问题就是,如果object是一个嵌套的对象,我们该怎么替换?
即:
代码如下:

输出:'Swallows may have gone, but there is a time of return'


源码里面有个正则var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;就是用来实现这个目的的。依次类推,任何深层次的嵌套都可以实现。

要做替换,我们最核心的就是要有一个替换字符的方法,源码里面用的是gsub,下面给出一个gsub的最简版本:
代码如下:

输出there is a time ofdemo



下面回到Template来,基本要求:有类有方法
代码如下: