在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!和往常一样,如果让你回答我的问题:还有很多我甚至没有想到的信息,比如数据集浏览器支持。回答你的问题:(顺便说一句,也许你