有没有办法判断实例变量是在类/对象内部实例化的还是从外部引用的?
class A {
b1 = new B();
constructor(public b2:B) {}
}
即,我想找到对象属性/变量;拥有";由对象(即由其自身实例化,此处为b1(与被引用的对象(此处为b2(进行比较。
您的代码在JS中编译成这样(我为B添加了class def(:
class B {
}
class A {
constructor(b2) {
this.b2 = b2;
this.b1 = new B();
}
}
除非使用反射库或添加注释,否则必须使用它。因此,据我所知,没有API可以简单地输出构造函数的参数名称。
如果您仍然想继续并且不想投入大量资金,那么这种方法的一个廉价版本可能只是在A.toString()
的输出中使用一些足够聪明的正则表达式来检测参数名称,并将它们与A
实例上的成员名称相关联。
不,没有办法做到这一点。
请注意,区别甚至比您想象的更模糊:构造函数参数值可能仅为该实例创建,由其所有(new A(new B())
(,或者在A
的构造函数内创建的对象可能在从外部访问后变成共享对象(new C(a.b1)
(。如果你想决定一个对象是否是";拥有";无论是否由A
实例决定,您都需要在类的文档中描述该约定(即其构造函数和可能返回字段的方法/访问器(。
如果我们需要拥有smth,这意味着它应该被封装,不能用于公共用途。我给你的建议是明确地说b1是一个私人领域。但是,在构造函数本身中初始化了哪个属性,在字段定义级别初始化了哪些属性,这是未知的。