gpt4 book ai didi

javascript - 如何在JavaScript中的类和扩展类创建的对象之间进行引用?

转载 作者:行者123 更新时间:2023-12-03 00:09:19 25 4
gpt4 key购买 nike

我创建了两个类:

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)

现在,有几种方法可以实际将属性从第一个类传递到另一个类(或从第一个对象传递到第二个对象),但无论我做什么,第二个对象都不会引用第一个对象,它只是创建自己的属性“副本” 。所以当我这样做时:

mySecondObj.fname = "someothername";

第一个对象不会改变 - 它没有引用第二个对象(或其他方式 - 也不起作用)。我的问题是:如何解决类上(或类外)的这种“连接”,以实际相互引用新对象?我想让它尽可能简单(这就是为什么我把可选参数留在第二类)。

最佳答案

这里尝试使用getset来维护两个对象之间的引用连接。

请参阅下文并阅读评论。

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)

关于javascript - 如何在JavaScript中的类和扩展类创建的对象之间进行引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54818116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com