我是按照这个实现的。
//to_s.js
(function(){
String.prototype.to_s = function(){
var str = this.toString();
var convert = function(s){
return eval(s);
};
while(/#{(\w+)}/.test(str)){
// bad because I use eval...
var matchStr =RegExp.$1;
var str = str.replace(/#{(\w+)}/,convert(matchStr));
}
return str;
};
})();
module.exports = String.prototype.to_s;
// test/to_s_test.js
require("./../to_s");
var name = 33;
"hello #{name}".to_s();
我运行to_s_test.js,但它发生了'名称未定义'的错误。但我不知道为什么会发生。但是将'var name = 33'改为name = 33,它有效......你呢有什么想法吗?提前谢谢。
答案 0 :(得分:2)
它只能在没有var
的情况下工作,因为eval
出现在另一个上下文中,因此只能使用您的方法访问全局变量。当您不声明变量时,将自动创建全局;但是,在node.js中,模块中声明的变量不是全局的。
这就是为什么as I previously mentioned试图使语言符合其他语言的习语是坏主意。