1

CoffeeScript のプライマリ タイプをオーバーライドする関数がありますが、この関数は値を返すため、それ自体を変更したいと考えています。

String::replaceAll = (what, to) ->
    regexPattern = new RegExp(what, "g")
    this.replace regexPattern, to

これを次のように使用する必要があります。

test = test.replaceAll "sth", "sth2"

私はこれをこのように使いたい:

test.replaceAll "sth", "sth2" # only, without assigning

(this = this.replace regexPattern, to # は機能しません)

4

1 に答える 1

2

javascript/coffeescript の文字列は不変であり、一度作成すると変更できません。したがって、新しい値を返すためだけに、それ自体を変更することはできません。ただし、関数は値を返すため、必要に応じて現在設定されているように関数をチェーンできます。

それで

test = test.replaceAll(x,y).replaceAll(a,b)

うまくいくはずです

参考文献

MDN :

C などの言語とは異なり、JavaScript の文字列は不変です。つまり、文字列が作成されると、それを変更することはできません。ただし、元の文字列の操作に基づいて別の文字列を作成することは可能です。

それで:

JavaScript 文字列は不変ですか? JavaScript で「文字列ビルダー」が必要ですか?

于 2013-05-30T16:04:45.510 に答える