繁体   English   中英

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

[英]How to make a reference between objects created by class and extended class in javascript?

我创建了两个类:

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";

第一个对象没有更改-它没有引用第二个对象(或者相反-也不起作用)。 我的问题是:如何解决在类上(或其中的类)之间的这种“对接”,以实际上相互引用新对象? 我想使其尽可能简单(这就是为什么我在第二堂课中留下了可选参数)。

这是尝试使用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 (ab[key] != undefined) a[key] =ab[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.bd= 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) 

创建类继承并不意味着它们通过引用隐式共享值。 因此,myfirstobj和mysecondobj将在内存中占据自己的空间,对它们中的任何一个所做的更改都不会自动更改其对应部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM