0

ここで質問に答えていましたルビーの "#{}" シーケンスに相当する JavaScript はありますか? JavaScriptプロトタイプで問題が発生したとき。文字列を印刷、フォーマット、連結するルビーな方法を提供する、最初の機能関数の代替方法を提供したかったのです。なぜ通常の機能は機能し、プロトタイプ機能は機能しないのですか?

<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)})+"
"; }

最初の行は正しいです。連結された文字列です。2 行目は結果ではなく、出力される関数そのものです。

4

1 に答える 1

2

"#{f} #{b}".p"#{f} #{b}" は文字列であるため、関数自体 (String.p) を参照します。

"#{f} #{b}".p()foo bar を出力したい。

于 2012-04-13T20:49:15.447 に答える