伪造命名空间层次结构的流行方法:
class Stem {};
Stem.Branch = class extends Stem {};
Stem.Branch.Twig = class extends Stem.Branch {};
Stem.Branch.Twig.Leaf = class extends Stem.Branch.Twig {};让我们对一个实例进行一些内省。以下是“错误”的/unintended结果(可能会上升到找到名称为止):
» (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"我想在类名定义之后处理它,这样实例的构造函数名就会显示出我想要的,但是我不知道如何显示。
发布于 2017-04-21 08:49:08
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"https://stackoverflow.com/questions/43524710
复制相似问题