Javascript:指定具有唯一随机属性的新对象
我正试图创建一个基于构造函数的对象数组。在创建构造对象的过程中,为每个对象分配一个ID&一个随机整数作为数组的第一个值Javascript:指定具有唯一随机属性的新对象,javascript,arrays,constructor,Javascript,Arrays,Constructor,我正试图创建一个基于构造函数的对象数组。在创建构造对象的过程中,为每个对象分配一个ID&一个随机整数作为数组的第一个值 var defaults = { x: 0, y: 0, d: [1,1], // destination s: 2 // speed }; var stage = document.getElementById('stage'); var oM = function ( vars ) { var vars = vars; t
var defaults = {
x: 0,
y: 0,
d: [1,1], // destination
s: 2 // speed
};
var stage = document.getElementById('stage');
var oM = function ( vars ) {
var vars = vars;
this.fn = {};
this.v = vars.v;
this.i = vars.i;
this.v.d = [ 0, 0 ];
this.init = function( i ) {
var r = Math.floor( Math.random() * 999);
var d = Math.floor( Math.random() * 999);
var e = document.createElement('div');
e.id = 'bit-' + i;
e.classList.add('bit', 'mob', 'test');
stage.appendChild(e);
this.v.x = r;
this.v.d[0] = d;
console.log( this.v.d );
this.e = document.getElementById( 'bit-' + i );
this.e.style.left = this.v.x ;
};
this.move = function() {
var i = this.i;
var p = this.v.x;
var d = this.v.d[0];
var s = this.v.s;
var m = 'stay';
if ( ( p > d && ( p - s ) <= d ) || ( p < d && ( p + s ) >= d ) ) {
p = d;
} else if ( p > d ) {
// move W
p = p - s;
m = 'west';
} else if ( p < d ) {
// move E
p = p + s;
m = 'east';
}
// console.log('index: ' + i + ' x: ' + p + ': moved: ' + m + ' @' + s + ': toward: ' + d + ' from: ' + this.v.x);
this.v.x = p;
this.e.style.left = this.v.x ;
console.log( this.v.d );
}
};
var eng = {};
eng.arr = [];
eng.init = function() {
for ( var i = 0; i < 20; i++ ) {
var u = new oM( {
i: i,
v: defaults
});
u.init( i );
eng.arr.push( u );
// console.log( t );
};
}
eng.turn = function() {
for ( var i = 0; i < eng.arr.length; i++ ) {
console.log( eng.arr[ i ].v.d );
// eng.arr[ i ].move();
};
};
var f = 0;
eng.init();
console.time('turn: 0');
window.run = function () {
if (f <= 9.1300) {
window.requestAnimationFrame( run );
eng.turn();
console.timeEnd('turn: ' + f);
f = f + 1;
console.time('turn: ' + f);
};
};
run();
var默认值={
x:0,,
y:0,
d:[1,1],//目的地
s:2/速度
};
var stage=document.getElementById('stage');
var oM=函数(vars){
var vars=vars;
this.fn={};
这个.v=变量.v;
this.i=vars.i;
这个.v.d=[0,0];
this.init=函数(i){
var r=Math.floor(Math.random()*999);
var d=数学地板(数学随机()*999);
var e=document.createElement('div');
e、 id='位-'+i;
e、 添加('bit','mob','test');
第二阶段(e);
这个。v.x=r;
这个.v.d[0]=d;
console.log(this.v.d);
this.e=document.getElementById('bit-'+i);
this.e.style.left=this.v.x;
};
this.move=函数(){
var i=这个。i;
var p=这个v.x;
var d=该.v.d[0];
var s=该值;v.s;
var m=‘停留’;
如果((p>d&(p-s)=d)){
p=d;
}否则如果(p>d){
//移动W
p=p-s;
m=‘西’;
}否则如果(p
因为v
(并且连续地,v.d
)对于您创建的所有对象都是相同的哈希/对象。您在内存中改变相同的位置。每个对象的默认值
ID不会重复,因为您重新分配了对新对象的引用,而不是修改现有对象。好的,这很有意义。是否使用object.assign()在这种情况下复制默认值是有意义的吗?它似乎工作得很好&这是我见过的最简单的解决方案。@MarcusWebb:不,它只做浅层克隆。你需要深度克隆(也克隆阵列)。啊,好的,我之前读过关于深度克隆的文章。非常感谢,我会继续。