原型函数打印自己而不是结果

时间:2012-04-13 20:44:51

标签: javascript prototype

当我遇到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)})+"
"; }

第一行是正确的,它是连接的字符串,第二行是打印的函数本身,而不是结果..

1 个答案:

答案 0 :(得分:2)

"#{f} #{b}".p指的是函数本身(String.p),因为“#{f}#{b}”是一个字符串。

你想要"#{f} #{b}".p()来打印foo吧。