gpt4 book ai didi

javascript - 如何在类中列出回调

转载 作者:行者123 更新时间:2023-12-03 05:18:24 25 4
gpt4 key购买 nike

我想知道是否可以在类中列出回调?

我已经尝试过此处列出的答案:Get functions (methods) of a class

但他们没有列出回调。

export default class Foo {
public myCallback: () => void;
private readonly bar: any;

constructor() {
console.log(Object.getOwnPropertyNames(this).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(this))​));
// [ 'bar', 'constructor', 'biz' ]
// 'myCallback' is not listed.
}

public biz() {
}
}

最佳答案

这是因为编译器生成 JavaScript 代码的方式。

由于 myCallback 属性从未设置,因此它优化了代码并且在 javascript 中不输出任何内容。

 var Foo = (function() {
function Foo() {
// no my callback property is generated since it's never used
console.log(Object.getOwnPropertyNames(this).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(this))));

}
Foo.prototype.biz = function() {};
return Foo;
}());

但是,如果在运行时您实际设置了该属性,它将出现。像这样。

class Foo {
public myCallback: () => void;
private readonly bar: any;

constructor() {

}

public logMethods() {
var props = [];
let obj = this;
do {
props = props.concat(Object.getOwnPropertyNames(obj));
} while (obj = Object.getPrototypeOf(obj));

props.forEach(method => console.log(method));
}
}


let a = new Foo();
a.myCallback = () => console.log('abc');

a.logMethods();

您可以查看工作示例 here .

关于javascript - 如何在类中列出回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506434/

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