在Javascript中动态设置对象数组的值

在Javascript中动态设置对象数组的值,javascript,arrays,object,Javascript,Arrays,Object,我怎样才能让它工作 正在尝试设置包含块对象的块数组 var块=[]; 变量块={ 类型:null, 颜色:空 }; var dom_blocks=document.querySelectorAll('.block'); 对于(var i=0,ii=dom_blocks.length;i

我怎样才能让它工作

正在尝试设置包含块对象的块数组

var块=[];
变量块={
类型:null,
颜色:空
};
var dom_blocks=document.querySelectorAll('.block');
对于(var i=0,ii=dom_blocks.length;i

此行:

 blocks[i].block = dom_blocks[i].dataset.type;
blocks[i].block.color = dom_blocks[i].dataset.color;
依赖于支持数据集的浏览器,该数据集。在这样做的浏览器上,它会将
块[i].block
设置为字符串(
“true”
“false”
)。对于较旧的浏览器,可以使用
getAttribute

 blocks[i].block = dom_blocks[i].getAttribute("data-type");
(顺便说一句,你的意思可能是
.type=
而不是
.block=
?)

这一行:

 blocks[i].block = dom_blocks[i].dataset.type;
blocks[i].block.color = dom_blocks[i].dataset.color;
不执行任何操作,因为您正在对基本字符串设置属性
color
。当您这样做时,字符串被短暂提升为一个对象,但随后该对象被丢弃,这将成为一个禁止操作

所以,如果事情“爆炸”,听起来就像你在使用一个不支持
dataset
的浏览器。否则,您只需要使用
颜色
执行其他操作

最后,如果您只是想将其唯一属性分配给实例,那么使用
作为原型是没有意义的

如果要在
块[i]
上设置
颜色,而不是
块[i]。块
,例如:

blocks[i].color = dom_blocks[i].dataset.color;
…它可以工作(在支持
数据集
的浏览器上):

var块=[];
变量块={
类型:null,
颜色:空
};
var dom_blocks=document.querySelectorAll('.block');
对于(var i=0,ii=dom_blocks.length;i
。作为控制台包装器{
最大高度:100%!重要;
}

此行:

 blocks[i].block = dom_blocks[i].dataset.type;
blocks[i].block.color = dom_blocks[i].dataset.color;
依赖于支持数据集的浏览器,该数据集。在这样做的浏览器上,它会将
块[i].block
设置为字符串(
“true”
“false”
)。对于较旧的浏览器,可以使用
getAttribute

 blocks[i].block = dom_blocks[i].getAttribute("data-type");
(顺便说一句,你的意思可能是
.type=
而不是
.block=
?)

这一行:

 blocks[i].block = dom_blocks[i].dataset.type;
blocks[i].block.color = dom_blocks[i].dataset.color;
不执行任何操作,因为您正在对基本字符串设置属性
color
。当您这样做时,字符串被短暂提升为一个对象,但随后该对象被丢弃,这将成为一个禁止操作

所以,如果事情“爆炸”,听起来就像你在使用一个不支持
dataset
的浏览器。否则,您只需要使用
颜色
执行其他操作

最后,如果您只是想将其唯一属性分配给实例,那么使用
作为原型是没有意义的

如果要在
块[i]
上设置
颜色,而不是
块[i]。块
,例如:

blocks[i].color = dom_blocks[i].dataset.color;
…它可以工作(在支持
数据集
的浏览器上):

var块=[];
变量块={
类型:null,
颜色:空
};
var dom_blocks=document.querySelectorAll('.block');
对于(var i=0,ii=dom_blocks.length;i
。作为控制台包装器{
最大高度:100%!重要;
}

使用跨浏览器,通过直接在推送中创建对象来简化操作

无需显式调用Object.create()

var blocks=[],
dom_blocks=document.querySelectorAll('.block');
对于(var i=0,ii=dom_blocks.length;i

使用跨浏览器,通过直接在推送中创建对象来简化操作

无需显式调用Object.create()

var blocks=[],
dom_blocks=document.querySelectorAll('.block');
对于(var i=0,ii=dom_blocks.length;i


有什么建议为什么要投否决票并关闭?你想达到什么目的?“寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅:”“您已经完成了MCVE(我假定),但问题是什么?目标是什么?有什么建议为什么要投否决票并关闭?你想实现什么?“寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅:”“您已经完成了MCVE(我假定),但问题是什么?目标?谢谢你,T.J!和往常一样,如果让你回答我的问题:还有很多我甚至没有想到的信息,比如数据集浏览器支持。回答你的问题:(顺便说一句,你的意思可能是.type=而不是.block=?)是的,那是我的问题。。!谢谢大家!@卡兰巴:不用担心!谢谢你,T.J!和往常一样,如果让你回答我的问题:还有很多我甚至没有想到的信息,比如数据集浏览器支持。回答你的问题:(顺便说一句,也许你