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

5
// 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,'')
Согласен, в Chrome тоже работает нормально:jsfiddle.net/4hPhG James Allardice
Ваш обновленный код не является функцией. Rob W
Единственное, что я вижу, что в вашем коде неправильно, - это отсутствие; на первом утверждении. d_inevitable
@BillyMoon Ваш обновленный пример не имеет никакого смысла. Вы можете это уточнить? Как насчет показа реального кода, если он не слишком большой? Rob W
У меня работает нормально (в Firefox). Это может помочь, если вы объясните, что "сломано" средства. Pointy

Ваш Ответ

1   ответ
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.
Error: User Rate Limit ExceededreplaceError: User Rate Limit Exceededthis.replace(...)Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Billy Moon

Похожие вопросы