7
// I am trying to make a clone of String's replace function
// and then re-define the replace function (with a mind to
// call the original from the new one with some mods)
String.prototype.replaceOriginal = String.prototype.replace
String.prototype.replace = {}

この次の行は壊れています - どうすれば修正できますか?

"lorem ipsum".replaceOriginal(/(orem |um)/g,'')
4

1 に答える 1

25

唯一考えられる問題は、コードが 2 回実行されることです。これにより、問題が発生します。実際のオリジナル.replaceが消えてしまいます。

このような問題を回避するには、次の一般的な方法を使用して組み込みメソッドを置き換えることを強くお勧めします。

(function(replace) {                         // Cache the original method
    String.prototype.replace = function() {  // Redefine the method
        // Extra function logic here
        var one_plus_one = 3;
        // Now, call the original method
        return replace.apply(this, arguments);
    };
})(String.prototype.replace);
  • これにより、既存の機能を壊すことなく複数のメソッドを変更できます
  • コンテキストは によって保持され.apply()ます: 通常、thisオブジェクトは (プロトタイプ) メソッドにとって不可欠です。
于 2012-04-07T20:13:21.210 に答える