我需要一个简单的js引擎。
因此,我创建了一个函数:
function compile(tpl, scope){
return tpl.replace(/\{\{([\s\S]+?)\}\}/g, function(caught, content){
var compiled;
try{
compiled = eval.call(scope, content);
}catch(e){
compiled = caught;
console.error(e);
}finally{
return compiled;
}
});
}
好吧,调用它。
compile('<div>{{ maxSize / 1024 / 1024 }}M</div>', { maxSize: 1048576 });
但是,错误跳出“未定义maxSize”。
我该如何解决?
最佳答案
可能有帮助的是使用另一个邪恶的构造with
并执行类似的操作:
try {
compiled = (new Function('with(this){return ' + content + '}')).call(scope);
} catch ( ... )
这将使您的方法可行,但并不安全。
演示:http://jsfiddle.net/4rujz5b7/