我创建了两个类:
class MyFirstClass {
constructor(fname, lname, date) {
this.fname = fname;
this.lname = lname;
this.date = date;
}
}
class MySecondClass extends MyFirstClass {
constructor(id, optionalArg) {
super();
this.id = id;
}
}
然后创建两个这样的对象:
let myFirstObj = new MyFirstClass("foo", "bar", "today");
let mySecondObj = new MySecondClass(1234); //***(1234, optionalArg)
现在,有几种方法可以将属性从第一类实际传递给另一个(或从第一个obj传递到第二个),但是我所做的第二个对象都不引用第一个对象,它只是创建自己的属性“副本” 。所以当我这样做时:
mySecondObj.fname = "someothername";
第一个对象没有更改-它没有引用第二个对象(或者相反-也不起作用)。 我的问题是:如何解决在类上(或其中的类)之间的这种“对接”,以实际上相互引用新对象? 我想使其尽可能简单(这就是为什么我在第二堂课中留下了可选参数)。
答案 0 :(得分:1)
这里尝试使用get
和set
来维护两个对象之间的引用连接。
请参阅下文并阅读评论。
class MyFirstClass {
constructor(fname, lname, date) {
this.f_name = fname;
this.f_name = lname;
this.d = date;
this.b = this;
}
set base(value){
this.b = value;
var a = this;
Object.keys(this).forEach(function(key){
if (a.b[key] != undefined)
a[key] =a.b[key]
});
}
set fname(value){
this.f_name = this.b.f_name = value;
}
get fname(){
return this.f_name;
}
get lname(){
return this.l_name;
}
set lname(value){
this.l_name =this.b.l_name= value;
}
set date(value){
this.d =this.b.d= value;
}
get date(){
return this.d;
}
}
class MySecondClass extends MyFirstClass {
constructor(id,base,optionalArg) {
super();
this.id = id;
// chooce to have a reference to another object as base
// now when you change either this or base class the both of them will change to
if (base){
this.base = base;
base.b = this;
}
}
}
let myFirstObj = new MyFirstClass("foo", "bar", "today");
// myFirstObj is optional.
let mySecondObj = new MySecondClass(1234, myFirstObj); //***(1234,base, optionalArg)
mySecondObj.fname = "test"
console.log(myFirstObj.fname)
答案 1 :(得分:0)
创建类继承并不意味着它们通过引用隐式共享值。因此,myfirstobj和mysecondobj将在内存中占据自己的空间,并且对它们中的任何一个所做的更改都不会自动更改其对应部分。