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 - Fatal编程技术网

对象中的Javascript对象

对象中的Javascript对象,javascript,Javascript,您如何在Javascript中定义一个对象,使其主体包含您正在定义的对象的属性?例如,如果我定义了一个叫做有机体的类,而任何有机体的定义都包括另外两个叫做organismA和organismB的有机体?是这样的吗? Organism (){ value: value Organism organismA; //microbe for example Organism organismB; //bacteria for example }; Javascript不是类型化语言 不能强制对象属

您如何在Javascript中定义一个对象,使其主体包含您正在定义的对象的属性?例如,如果我定义了一个叫做有机体的类,而任何有机体的定义都包括另外两个叫做organismA和organismB的有机体?是这样的吗?

Organism (){

value: value
Organism organismA; //microbe for example
Organism organismB; //bacteria for example

};

Javascript不是类型化语言

不能强制对象属性的类型。如果你想这样做,可以看看类似于Typescript的东西

您可以创建“嵌套对象”

但不能强制执行其类型:

// not an error (until you try to use the property as an Organism)
organism.organismA = "Not an Organism";   
organism.organismB = 123; 

organism.doesntEvenExist = microbe;

如果您试图创建一个构造函数来定义实例上的属性,而这些属性也是对象的实例,那么这是不可能的。 例如,假设这是您的构造函数:

功能有机体(){ this.organima=新生物体(); }

然后尝试创建的新实例将导致“RangeError:Maximum call stack size Excelled”(超出最大调用堆栈大小),原因很好,因为每次创建新实例时,它都会尝试自己创建一个新实例,以此类推,直到超出堆栈

但是,您可以在javascript中执行此操作:

function有机体(){}
var有机体=新有机体();
organism.organismA=新生物体();
organism.organismB=新生物体();
//现在这个实例和它的属性都是有机体
console.log('有机体是有机体的实例:'+(有机体的实例));//真的
log('organism.organismA是organism的实例:'+(organism.organismA instanceof organism))//真的
log('organism.organismB是organism的实例:'+(organism.organismB instanceof organism))//真的
//如果你愿意,你可以在工厂里包装
函数createExtendedOrganism(){
var有机体=新有机体();
organism.organismA=新生物体();
organism.organismB=新生物体();
返回有机体;
}
var extended有机体=createextended有机体();
//同样,实例及其属性都是有机体
log('extended有机体是有机体的实例:'+(extended有机体的实例))//真的
log('extendedOrganism.organismA是生物体的实例:'+(extendedOrganism.organismA instanceof Organism))//真的

log('extendedOrganism.organismB是生物体的实例:'+(extendedOrganism.organismB instanceof Organism))//true
这可能会有帮助,因为JavaScript不进行显式键入,所以您必须稍微更改该示例。简短回答:您可以将任意多的对象放入对象中,并且可以在对象构造函数中绑定任意多个本身就是对象的实例属性。只需为属性指定正确的值即可。
// not an error (until you try to use the property as an Organism)
organism.organismA = "Not an Organism";   
organism.organismB = 123; 

organism.doesntEvenExist = microbe;