[英]Extended Array Class in Javascript: How should I create helper functions to modify Array without assigning a new reference?
[英]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";
第一個對象沒有更改-它沒有引用第二個對象(或者相反-也不起作用)。 我的問題是:如何解決在類上(或其中的類)之間的這種“對接”,以實際上相互引用新對象? 我想使其盡可能簡單(這就是為什么我在第二堂課中留下了可選參數)。
這是嘗試使用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 (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.