5

Вопрос по prototype, javascript – Как заменить прототип javascript пользовательской функцией

// 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,'')
  • Error: User Rate Limit ExceededreplaceError: User Rate Limit Exceededthis.replace(...)Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Billy Moon
  • @BillyMoon Ваш обновленный пример не имеет никакого смысла. Вы можете это уточнить? Как насчет показа реального кода, если он не слишком большой?

    от Rob W
  • Единственное, что я вижу, что в вашем коде неправильно, - это отсутствие; на первом утверждении.

    от d_inevitable
  • У меня работает нормально (в Firefox). Это может помочь, если вы объясните, что "сломано" средства.

    от Pointy
  • Ваш обновленный код не является функцией.

    от Rob W
  • Согласен, в Chrome тоже работает нормально:jsfiddle.net/4hPhG

    от James Allardice
  • 18

    Единственная возможная проблема заключается в том

    что ваш код выполняется дважды, что вызывает проблемы: настоящий оригинал.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);
    
    This allows multiple method modifications without breaking existing functionality The context is preserved by .apply(): Usually, the this object is vital for (prototype) methods.