我的目标如下:
var level2blocks = {
block1 : {
left : 478,
right : 515,
up : 0,
down : 510
},
block2 : {
left : -10,
right : 515,
up : 373,
down : 600
}
};我需要保留对象的名称"block1“和"block2”,因为我在其他函数中调用它们,基于html5 5-画布中播放器的位置。我还想将它们保存在对象"level2blocks“中,因为最终我将有大约20个这样的块。
如果可能的话,可以分配给block1和block2原型,这样我就不必每次输入所有4个参数了?这是我想要使用的原型:
var Block = function (left,right,up,down) {
this.left = -10;
this.right = 515;
this.up = 0;
this.down = 600;
}因此,我的想法是,我将只传递,例如,像左和向下这样的2个参数。缺失的值将从原型值中提取。
例如:
var level2blocks = {
block1 : {
left : 478,
right : 515,
},
block2 : {
left : -10,
down : 600
}
};然后在函数中,当我调用level2blocks.block1.down时,它将引用默认值.
发布于 2015-07-01 07:22:49
你可以在下面这样做。Block是内部块的类,Level2blocks是管理这些块的类。Level2blocks可以有诸如add、remove等方法用于内部blocks。
您还可以使用原型值作为默认值,就像我在BlockProto类中所做的那样。
function extend(obj, props) {
for (var prop in props) {
if (props.hasOwnProperty(prop)) {
obj[prop] = props[prop];
}
}
}
function Block(left, right, up, down) {
this.left = left || -10; // for default values
this.right = right || 515;
this.up = up || 0;
this.down = down || 600;
}
function BlockProto(obj) {
extend(this, obj);
}
BlockProto.prototype.left = -10;
BlockProto.prototype.right = 515;
BlockProto.prototype.up = 0;
BlockProto.prototype.down = 600;
function Level2blocks() {
this.blocks = {};
}
Level2blocks.prototype.addBlock = function(left, right, up, down) {
var numOfBlocks = Object.keys(this.blocks).length;
this.blocks['block' + numOfBlocks] = new Block(left, right, up, down);
};
Level2blocks.prototype.addPrototypeBlock = function(obj) {
var numOfBlocks = Object.keys(this.blocks).length;
this.blocks['block' + numOfBlocks] = new BlockProto(obj);
};
var level2Blocks = new Level2blocks();
level2Blocks.addBlock(2, 4, 2, 4);
level2Blocks.addBlock(123, 2, 090, 24);
level2Blocks.addBlock();
level2Blocks.addBlock(undefined, undefined, undefined, 900);
level2Blocks.addPrototypeBlock({});
level2Blocks.addPrototypeBlock({
left: 4444
});
console.log(level2Blocks.blocks);
console.log(level2Blocks.blocks.block4.left);
console.log(level2Blocks.blocks.block4.right);
var HTMLStr = '<pre>' + JSON.stringify(level2Blocks.blocks, 0, 4) + '</pre>';
HTMLStr += 'Block4 values from prototype: ';
HTMLStr += [level2Blocks.blocks.block4.right, level2Blocks.blocks.block4.left, level2Blocks.blocks.block4.up, level2Blocks.blocks.block4.down].join(', ');
HTMLStr += '<br/> Block5 values from prototype: ';
HTMLStr += [level2Blocks.blocks.block5.right, level2Blocks.blocks.block5.left, level2Blocks.blocks.block5.up, level2Blocks.blocks.block5.down].join(', ');
document.write(HTMLStr);<div id="out"></div>
发布于 2015-07-01 07:17:12
var level2blocks = {
block1: new Block(478, 515, 0, 510),
block2: new Block(-10, 515, 373, 600)
};https://stackoverflow.com/questions/31154686
复制相似问题