实现一个简单的字符串模版函数

88 阅读1分钟

1、正则替换

let str = '你爱我,我爱你,${line1}甜蜜蜜。你爱我,我爱你,${line2}${line3}。'; let obj = { line1: '我学编程', line2: '你学编程', line3: '天灭你' }; function templateStrFun(str, obj) { return str.replace(/\$\{(\w+)\}/g, (match, key) => { return obj[key]; }); } templateStrFun(str, obj);

2、with函数

// 代码由掘金大神@一口怪兽一口烟提供 String.prototype.render = function (obj) { with(obj) { return eval('' + this + '') } }

3、es6结构

String.prototype.render = function(obj) { // 利用了ES6的解构、对象keys新方法,在函数内部解构并自动展开变量 eval(var {${Object.keys(obj).join(',')}} = obj) // 利用eval使字符串直接作为ES6解析 return eval('' + this + '') }