works:programmer:js:module-export-hook

Хуки на module exports, простой пример

Пример реализации

function sayHello(name) {
    console.log("Hello, " + name + "!");
}
 
 
function staticHook(ptr) {
    console.log("statically hooked");
    return ptr;
}
 
function runtimeHook(ptr) {
    return function(...args) {
        console.log("runtime hooked");
        ptr(...args);
    }
}
 
const hello1 = staticHook(sayHello);
const hello2 = runtimeHook(sayHello);
 
 
hello1("World"); hello1("World");
hello2("Universe"); hello2("Universe");
console.log("-----------");
 
//-----------
 
class Testus {
    constructor(name) {
        this.name = name;
    }
    sayHello() {
        console.log("Hello, " + this.name + "!");
    }
}
 
function configHook(config, callable) {
    return function(...args) {
        let inst = new callable(...args);
        for (let i in config) {
            if (inst.hasOwnProperty(i)) {
                inst[i] = config[i];
            }
        }
        return inst;
    }
}
 
//------------
 
const config = {name: "Guest"};
const TestusHooked = configHook(config, Testus);
 
 
let inst = new TestusHooked("Admin");
inst.sayHello();

Вывод в консоль

statically hooked
Hello, World!
Hello, World!
runtime hooked
Hello, Universe!
runtime hooked
Hello, Universe!
-----------
Hello, Guest!

Как можно использовать

import classHook from "./classHooks"
class HookedClass {}
export default classHook(HookedClass);
works/programmer/js/module-export-hook.txt · Last modified: 2021/07/16 07:22 by Chugreev Eugene