首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在类表达式定义后更改其构造函数名?

如何在类表达式定义后更改其构造函数名?
EN

Stack Overflow用户
提问于 2017-04-20 16:10:48
回答 1查看 290关注 0票数 0

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

代码语言:javascript
运行
复制
class Stem {};
Stem.Branch = class extends Stem {};
Stem.Branch.Twig = class extends Stem.Branch {};
Stem.Branch.Twig.Leaf = class extends Stem.Branch.Twig {};

让我们对一个实例进行一些内省。以下是“错误”的/unintended结果(可能会上升到找到名称为止):

代码语言:javascript
运行
复制
» (new Stem.Branch.Twig).constructor.name
"Stem"

允许我在类表达式中附加一个名称:

代码语言:javascript
运行
复制
Stem.Branch.Twig = class Stem.Branch.Twig extends Stem.Branch {};

但是这是语法错误,标识符不能包含点,引用也没有帮助。没有点,它至少对人类有用,但对计算机来说却是相当无用的:

代码语言:javascript
运行
复制
Stem.Branch.Twig = class StemBranchTwig extends Stem.Branch {};
» (new Stem.Branch.Twig).constructor.name
"StemBranchTwig"

我想在类名定义之后处理它,这样实例的构造函数名就会显示出我想要的,但是我不知道如何显示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 08:49:08

代码语言:javascript
运行
复制
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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43524710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档