首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象中的对象和分配原型

对象中的对象和分配原型
EN

Stack Overflow用户
提问于 2015-07-01 07:08:30
回答 2查看 112关注 0票数 0

我的目标如下:

代码语言:javascript
复制
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个参数了?这是我想要使用的原型:

代码语言:javascript
复制
var Block = function (left,right,up,down) {
    this.left = -10;
    this.right = 515;
    this.up = 0;
    this.down = 600;
}

因此,我的想法是,我将只传递,例如,像左和向下这样的2个参数。缺失的值将从原型值中提取。

例如:

代码语言:javascript
复制
   var level2blocks = {
        block1 : {
            left : 478,
            right : 515,
        },
        block2 : {
            left : -10,
            down : 600
        }
    };

然后在函数中,当我调用level2blocks.block1.down时,它将引用默认值.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 07:22:49

你可以在下面这样做。Block是内部块的类,Level2blocks是管理这些块的类。Level2blocks可以有诸如addremove等方法用于内部blocks

您还可以使用原型值作为默认值,就像我在BlockProto类中所做的那样。

代码语言:javascript
复制
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);
代码语言:javascript
复制
<div id="out"></div>

票数 1
EN

Stack Overflow用户

发布于 2015-07-01 07:17:12

代码语言:javascript
复制
var level2blocks = {
    block1: new Block(478, 515, 0, 510),
    block2: new Block(-10, 515, 373, 600)
};
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31154686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档