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");