2012-04-13 4 views
0

私はjavacriptプロトタイプで問題が発生したときにこちらの質問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> 

これは

+0

ここに評価を避ける方法を知っている人は誰ですか?もちろん – peter

答えて

2

"#{f} #{b}".pを指す..最初の行が正しい

foo bar 
function() { return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+" 
"; } 

は、それが連結された文字列、第二の線が印刷される機能自体ではなく結果である与えます"#{f}#{b}"は文字列であるため、関数自体(String.p)に渡します。

"#{f} #{b}".p()にfoo barを印刷します。

+0

!私の愚かな、私はすでにあまりにもルビーに慣れている私は推測する、ありがとう – peter

関連する問題