我可以在 Javascript/Typescript 中分离实例化变量和引用变量吗?

有没有办法判断实例变量是在类/对象内部实例化还是从外部引用?


class A {

    b1 = new B();

    constructor(public b2:B) {}

}

即我想找到对象“拥有”的对象属性/变量(即由其自身实例化,此处为 b1)与被引用的对象(此处为 b2)。


当年话下
浏览 77回答 3
3回答

莫回无

你的代码在 JS 中编译成这个(我为 B 添加了类 def):class B {}class A {    constructor(b2) {        this.b2 = b2;        this.b1 = new B();    }}除非您使用反射库或添加注释,否则这是您必须使用的。因此,据我所知,没有任何 API 可以简单地为构造函数输出参数名称。如果您仍然想继续并且不想投入大量资金,那么这个的廉价版本可能只是在输出上使用一些足够聪明的正则表达式A.toString()来检测参数名称并将它们与A.

慕斯709654

不,没有办法做到这一点。请注意,区别比您想象的还要模糊:一个构造函数参数值可能是专门为该实例创建的,由它拥有 ( new A(new B())),或者在 的构造函数中创建的对象A稍后可能会在它之后共享已从外部访问 ( new C(a.b1))。如果你想决定一个对象是否被你的A实例“拥有”,你需要在你的类的文档中描述这个契约(即它的构造函数,以及可能返回一个字段的方法/访问器)。

动漫人物

如果我们需要 smth owned 这意味着它应该被封装并且不能公开使用。我对你的提议是明确地说 b1 是一个私有字段。但是关于哪个属性是在构造函数本身中初始化的以及哪个属性是在字段定义级别是未知的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript