gpt4 book ai didi

javascript - 我应该使用原型(prototype)装饰器还是有其他方法?

转载 作者:行者123 更新时间:2023-11-28 14:09:03 25 4
gpt4 key购买 nike

例如,我有一些代码。我需要将日志记录功能添加到“Test”类的“fn”函数中。同时它应该像原始函数一样工作而无需更改(接受并返回相同的值),但另外在控制台中显示“call”。我无法更改原始的“测试”类函数或创建的对象。只能在指定区域写入代码。因此,当我在“代码结束”之后调用 console.log 时,我应该看到结果和指定的“调用”。可以做吗?你能帮助我或给我建议吗?

class Test {
constructor(num) {
this.num = num;
}

fn(...numbers) {
const sum = (a, b) => a + b;
return this.num + numbers.reduce(sum);
}
}

// Сode here

// End of code

const mytest = new Test(5);
const result = mytest.fn(2, 3, 4);
console.log('Result: ', result);

最佳答案

您可以将函数包装在 Test.prototype 上:

const original = Test.prototype.fn;
Test.prototype.fn = function(...args) {
console.log("Log the call here");
return original.apply(this, args);
};

实例:

class Test {
constructor(num) {
this.num = num;
}

fn(...numbers) {
const sum = (a, b) => a + b;
return this.num + numbers.reduce(sum);
}
}

// Сode here
const original = Test.prototype.fn;
Test.prototype.fn = function(...args) {
console.log("Log the call here");
return original.apply(this, args);
};
// End of code

const mytest = new Test(5);
const result = mytest.fn(2, 3, 4);
console.log('Result: ', result);

请注意我调用原始版本的方式,使用 apply以便将 this 设置为正确的值。

关于javascript - 我应该使用原型(prototype)装饰器还是有其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60230371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com