JS передать функцию по ссылке, чтобы переопределить ее

У меня есть декоратор, который переопределяет функцию:

function decorator(target, key, descriptor) {
    descriptor.value = function() {
        console.log('overridden')
    }
}

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

function decorator(target, key, descriptor) {
    replaceMethod(descriptor.value)
}

function replaceMethod(originalMethod) {
    originalMethod = function() {
        console.log('overridden')
    }
}

Можно ли как-то сделать это таким образом?

2 ответа

Это может удовлетворить вашу цель:

function decorator(target, key, descriptor) {
    replaceMethod(descriptor, 'value')
}

function replaceMethod(obj, prop) {
    obj[prop] = function() {
        console.log('overridden')
    }
}

Это будет работать:

function bark(target, key, descriptor) {
    replaceWith(descriptor, function(msg){
        console.log("Woof!");
    });
    return descriptor;
}

function replaceWith(descriptor, value){
    descriptor.value = value;
}

class Animal {
    @bark
    greet(msg) {
        console.log(msg);
    }
}

new Animal().greet("Hello");

https://jsfiddle.net/DerekL/0sd9Lvs0/

Другие вопросы по тегам