当我遇到javascript原型问题时,我在这里回答了一个问题Is there a JavaScript equivalent of rubys "#{}" sequences?。我想提供第一个工作函数的替代方法,它提供了一种打印,格式化和连接字符串的红宝石方式。为什么正常功能正常工作而原型功能不起作用?
<script>
function p(str){
document.write(str.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>");
}
String.prototype.p = function() {
return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>";
};
var f="foo", b="bar"
p("#{f} #{b}")
document.write("#{f} #{b}".p);
</script>
这给出了
foo bar
function () { return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"
"; }
第一行是正确的,它是连接的字符串,第二行是打印的函数本身,而不是结果..
答案 0 :(得分:2)
"#{f} #{b}".p
指的是函数本身(String.p),因为“#{f}#{b}”是一个字符串。
你想要"#{f} #{b}".p()
来打印foo吧。