为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2022-12-29 15:38:10
有没有办法判断实例变量是在类/对象内部实例化还是从外部引用?class A {    b1 = new B();    constructor(public b2:B) {}}即我想找到对象“拥有”的对象属性/变量(即由其自身实例化,此处为 b1)与被引用的对象(此处为 b2)。
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

你的代码在 JS 中编译成这个(我为 B 添加了类 def):


class B {

}

class A {

    constructor(b2) {

        this.b2 = b2;

        this.b1 = new B();

    }

}


除非您使用反射库或添加注释,否则这是您必须使用的。因此,据我所知,没有任何 API 可以简单地为构造函数输出参数名称。


如果您仍然想继续并且不想投入大量资金,那么这个的廉价版本可能只是在输出上使用一些足够聪明的正则表达式A.toString()来检测参数名称并将它们与A.


查看完整回答
反对 回复 2022-12-29
?
慕斯709654

TA贡献1840条经验 获得超5个赞

不,没有办法做到这一点。

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


查看完整回答
反对 回复 2022-12-29
?
动漫人物

TA贡献1815条经验 获得超10个赞

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



查看完整回答
反对 回复 2022-12-29
  • 3 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信