javascript: добавить поведение к методу через прототип - проникнуть в код - PullRequest
0 голосов

У нас следующая ситуация, мы используем библиотеку для шифрования материала, я хочу знать, можем ли мы изменить параметры до того, как они будут зашифрованы. Я могу легко сделать это:

MyEncoder.prototype.encode = (value) => {//change it the way I want};

но как мне заставить его делать то, что он делал раньше, до того, как я его изменил? ( Я знаю !!! )

Это не сработает: var encoder = MyEncoder.prototype.encode; потому что он скопирует только метод, у него не будет this и, ну, вы знаете .

Если бы я мог отладить метод encode. Это помогло бы!

Ответы [ 2 ]

1 голос
/ 11 мая 2020

Напишите Выражение немедленно вызываемой функции (IIFE), которое 1-ое сохраняет исходную прототипную encode функциональность в закрытии, которое оно создает, а второе возвращает вашу собственную реализацию encode, которая является теперь под контролем переданные аргументы и возвращаемое значение исходного encode. Таким образом, вы написали своего рода модификатор метода around ...

MyEncoder.prototype.encode = (function /*create_around_modifier*/ (proto_encode) {
  return function /*modified_encode*/ (...argsArray) {

    // - intercept data flow ...
    //   ... e.g. look into or change the passed arguments.

    // ... implement the **before** part.

    // - call/invoke the original encode ...
    //
    // return value after invoking the original `encode`.
    const result = proto_encode.apply(this, argsArray);

    // - intercept data flow ...
    //   ... e.g. look at, work with or change the result.

    // ... implement the **after** part.

    //
    // - do not forget the return value.
  };
}(MyEncoder.prototype.encode));
0 голосов

Реальный пример, чем:

JSON.stringify = (function (proto_method) {
  return function (...args) {
    //I can to whatever I want before original method does it's job

    return proto_method.apply(this, args);
  };
}(JSON.stringify));

Таким образом, я могу легко изменить параметр, возможно, проверить, что было сделано, прежде чем что-то зашифровывать, учитывая, что JSON в основном используется для работы со сценарием.

Всем спасибо.

...