gpt4 book ai didi

javascript - 如何在定义后更改类表达式的构造函数名称?

转载 作者:行者123 更新时间:2023-12-03 04:30:11 25 4
gpt4 key购买 nike

伪造命名空间层次结构的流行方法:

class Stem {};
Stem.Branch = class extends Stem {};
Stem.Branch.Twig = class extends Stem.Branch {};
Stem.Branch.Twig.Leaf = class extends Stem.Branch.Twig {};

让我们对一个实例进行一些内省(introspection)。以下内容具有“错误”/非预期结果(可能会一直攀升,直到找到名称):

» (new Stem.Branch.Twig).constructor.name
"Stem"

我可以为类表达式附加一个名称:

Stem.Branch.Twig = class Stem.Branch.Twig extends Stem.Branch {};

但这是一个语法错误,标识符不能包含点,并且引用没有帮助。没有点,它至少对人类有效,但对计算机来说毫无用处:

Stem.Branch.Twig = class StemBranchTwig extends Stem.Branch {};
» (new Stem.Branch.Twig).constructor.name
"StemBranchTwig"

我想在定义后弄乱类名,以便实例的构造函数名称按我的意愿显示,但我不知道如何实现。

最佳答案

function assign_name(moniker) {
eval(`Object.defineProperty(${moniker}, 'name', {value: '${moniker}'});`);
}

class Stem {};

Stem.Branch = class extends Stem {};
assign_name('Stem.Branch');

Stem.Branch.Twig = class extends Stem.Branch {};
assign_name('Stem.Branch.Twig');

Stem.Branch.Twig.Leaf = class extends Stem.Branch.Twig {};
assign_name('Stem.Branch.Twig.Leaf');

» (new Stem.Branch.Twig).constructor.name
"Stem.Branch.Twig"

关于javascript - 如何在定义后更改类表达式的构造函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43524710/

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