Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中,如何在类创建的对象和扩展类之间进行引用?_Javascript_Ecmascript 6_Es6 Class - Fatal编程技术网

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

在javascript中,如何在类创建的对象和扩展类之间进行引用?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我创建了两个类: class MyFirstClass { constructor(fname, lname, date) { this.fname = fname; this.lname = lname; this.date = date; } } class MySecondClass extends MyFirstClass { constructor(id, optionalArg) { super

我创建了两个类:

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";
第一个对象没有改变-它没有引用到第二个对象(或者以另一种方式-也不起作用)。 我的问题是:如何解决类(或类外)上的“连接”以实际引用新对象?
我想让它尽可能简单(这就是为什么我在第二个类中留下可选参数)。

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

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

请参阅下文并阅读评论

classmyfirstclass{
构造函数(fname、lname、日期){
this.f_name=fname;
this.f_name=lname;
d=日期;
这个。b=这个;
}
设定基准(值){
这个.b=值;
var a=此;
Object.keys(this.forEach)函数(key){
如果(a.b[键]!=未定义)
a[键]=a.b[键]
});
}
设置fname(值){
this.f_name=this.b.f_name=value;
}
获取fname(){
返回此.f_名称;
}
获取lname(){
返回此.l_名称;
}
设置lname(值){
this.l_name=this.b.l_name=value;
}
设置日期(值){
此.d=此.b.d=值;
}
获取日期(){
把这个还给我;
}
}
类MySecondClass扩展了MyFirstClass{
构造函数(id、基、可选参数){
超级();
this.id=id;
//选择将对另一个对象的引用作为基准
//现在,当您更改这个类或基类时,它们都将更改为
如果(基本){
this.base=base;
base.b=这个;
}
}
}
让myFirstObj=新的MyFirstClass(“foo”、“bar”、“today”);
//myFirstObj是可选的。
让mySecondObj=newmysecondclass(1234,myFirstObj)//***(1234,基本,可选参数)
mySecondObj.fname=“测试”

log(myFirstObj.fname)
当然可以,但我需要新创建的对象相互引用。如何实现这一点?@BambinoNegro明确表示:如果你想让一个对象引用另一个对象-将其作为参数传递。zerkms-我需要它们都以这种方式创建-由两个互相扩展的类创建,我不介意后一个类(或类内部)是否应用了某种“干预”来实现这一点。只需要这种“整洁”。@BambinoNegro然后你需要详细说明你原来的问题,你所要求的没有什么意义。你可以做的是把objects.this作为参数传递,并将类构造函数中的.this绑定到参数类person(){constructor(newThis){this=newThis;}中的.this你想解决的总体问题是什么?这似乎很不寻常。通过简单的sintax来扩展第二类道具(或对象道具),从两个类中创建新的对象,一个类扩展到另一个类,实际上是指一个类到另一个类。我尝试了几种方法,但每种方法都无法创建两个相互引用的对象对不起,现在就这样做了。剩下的一个问题是thau(它不是“完全”可引用的——换句话说——如果您更改第一个obj参数,第二个不会更改)。无论如何,现在这个解决方案对我来说是可行的。现在它应该可以按照你的意愿工作,如果你改变firstobject,secoundobject会改变,当你改变secound时,第一个会改变。我只是希望我缺少了一些“bind”或“apply”或“call”:),我一直坚持在创建时调用其中的一些方法(关于“新建”-因为您已经在调用super()时命名了但未定义的道具-并且希望以某种方式将所有这些道具绑定到以前创建的Obj的道具上),但正如您可能已经知道的那样-您不能将此应用于创建。:(是的,您可以创建集合并获得动态,请阅读此。很高兴我能提供帮助