簡體   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