gpt4 book ai didi

angular - 我可以像 getter 一样返回一个函数吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:41 24 4
gpt4 key购买 nike

我正在为 console.log() 编写一个包装器,以便我可以控制它何时运行。

当我使用 getter 时我可以让它工作,但我想使用普通函数以便我可以传递一些 args。

我希望它的功能与使用 getter 相同,因为它会在控制台中打印正确的类和行号。

当我使用 getter 时,正确的消息和类名以及行号会输出到控制台:

get info() {
return console.info.bind(console);
}

调用者:

this.logger.info('this is a log');

控制台中的结果:

this is a log

当我使用函数时,没有任何输出到控制台

public info() {
return console.info.bind(console);
}

调用者:

this.logger.info('this is a log');

在空白控制台中的结果:

最佳答案

当您使用一个函数时,当您第一次调用它时,它只是返回与您传递的 this 引用绑定(bind)的函数引用。

所以需要用参数再次调用返回的函数对象。作为一个例子,我在下面的 es6 类中做了同样的事情:

class Test{
info() {
return console.info.bind(console);
}
}
let test = new Test();
test.info()("test");

如果这需要一步完成,我们可以使用callapply 来代替bind。 callapply 会立即调用函数,这与 bind 不同,后者只会绑定(bind) this 引用并返回绑定(bind)的函数。

使用调用:

info(){
return console.info.call(console, ...arguments);
}

应用:

info(){
return console.info.apply(console, arguments);
}

另一方面,当您使用 getter 时,访问像 info 这样的属性将导致调用 getter 并返回函数引用立即调用。

class Test{
get info() {
return console.info.bind(console);
}
}
let test = new Test();
test.info("test");

test.info -> returns the function reference
test.info("test") -> invokes the returned reference;

关于angular - 我可以像 getter 一样返回一个函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55467162/

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