Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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_Arrays_Javascript Objects - Fatal编程技术网

在javascript中,创建新对象时,其中的数组属性不会初始化为新对象

在javascript中,创建新对象时,其中的数组属性不会初始化为新对象,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我正在使用for循环创建5个类型为“RoundDiv”的新对象,它有一个属性“weirdArray”,这是一个空数组。调用“init()”方法时。“someValue”被推入“古怪数组” 问题是每次创建类型为“RounDiv”的新对象时,只会推送一次“someValue”,但单击任何“roundDiv”时,控制台日志会显示数组中的5个元素,而应该只有一个 “严格使用”; var roundDivPrototype={ weirdArray:新数组(), 初始化:函数(标签){ this.wei

我正在使用for循环创建5个类型为“RoundDiv”的新对象,它有一个属性“weirdArray”,这是一个空数组。调用“init()”方法时。“someValue”被推入“古怪数组”

问题是每次创建类型为“RounDiv”的新对象时,只会推送一次“someValue”,但单击任何“roundDiv”时,控制台日志会显示数组中的5个元素,而应该只有一个

“严格使用”;
var roundDivPrototype={
weirdArray:新数组(),
初始化:函数(标签){
this.weirdArray.push(“someValue”);
var me=这个;
var body=document.body;
var div=document.createElement(“div”);
div.className=“roundDiv”;
div.innerText=标签;
div.addEventListener(“单击”,函数(e){
警报(“数组长度:+me.weirdArray.Length”);
console.log(me.weirdArray);//me=this
});
附体儿童(div);
}
};
var RoundDiv=函数(标签){
这个.init(标签);
};
RoundDiv.prototype=roundDivPrototype;
对于(变量i=0;i<5;i++){
新一轮分区计划(i);
}
正文{
背景色:青色;
文本对齐:居中;
宽度:100%;
}
.roundDiv{
显示:内联块;
高度:100px;
宽度:100px;
背景色:白烟;
利润率:10px;
边框:实心;
边界半径:50%;
文本对齐:居中;
字号:5em;
框大小:边框框;
光标:指针;
线高:100px;
}

在第一个示例中,您在对象原型中实例化了
weirdArray
,使该数组属性为静态。因此,每个
RoundDiv
对象将共享相同的数组来存储数据

init
函数中实例化它,就像您在第二个示例中所做的那样,解决了这个问题。每次创建新的
RoundDiv
时,都会创建一个新的
weirdArray
实例


请参阅,它为每个示例显示了创建新数组的次数、时间以及每次
推送

后的数组大小。是的,并且,您不需要在原型中将其设置为“未定义”;仅在init()函数中定义就足够了。为此,我个人通常只在原型中声明方法,而不是数据属性……当然,如果您愿意,在原型中声明基本默认值(例如字符串的数量,而不是对象或数组)也可以。@PratikMedia另请参见: