Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定向类型化数组添加属性吗?_Javascript_Properties_Typed Arrays - Fatal编程技术网

Javascript 确定向类型化数组添加属性吗?

Javascript 确定向类型化数组添加属性吗?,javascript,properties,typed-arrays,Javascript,Properties,Typed Arrays,我有一个类型化数组(一个4元素的uint8clampedaray,用于颜色),我想给它添加一些属性,比如object。例如,一个是Uint32视图,用于快速获取像素值。可选地,另一对是颜色在colormap中的映射/索引对 这是可能的,即没有错误且工作正常,但会导致性能问题或其他不希望的副作用吗 我不会对它进行迭代,只是通过颜色[n]进行访问,在0-3中为n,所以这不会是一个问题,并且通过属性名称访问属性 我这样问是因为类型化数组是作为一种高性能、设备独立的交换而添加的。。就像cpu和gpu之间

我有一个类型化数组(一个4元素的uint8clampedaray,用于颜色),我想给它添加一些属性,比如object。例如,一个是Uint32视图,用于快速获取像素值。可选地,另一对是颜色在colormap中的映射/索引对

这是可能的,即没有错误且工作正常,但会导致性能问题或其他不希望的副作用吗

我不会对它进行迭代,只是通过颜色[n]进行访问,在0-3中为n,所以这不会是一个问题,并且通过属性名称访问属性


我这样问是因为类型化数组是作为一种高性能、设备独立的交换而添加的。。就像cpu和gpu之间一样,我不想把它搞砸。

如果数组具有自定义属性,那么在访问数组元素时,简单的性能测试似乎不会显示任何有意义的差异

请参见此处的测试结果:

或者,使用以下代码自己运行测试:

准备代码

var i, val;

var uintc8_vanilla_array = new Uint8ClampedArray(200);
for ( i = 0; i < 200; i++ ){
  uintc8_vanilla_array[i] = "foobar";
}

var uintc8_custom_array = new Uint8ClampedArray(200);
uintc8_custom_array.foo = "bar";
for ( i = 0; i < 200; i++ ){
  uintc8_custom_array[i] = "foobar";
}
vari,val;
var uintc8_阵列=新Uint8ClampedArray(200);
对于(i=0;i<200;i++){
uintc8_香草_数组[i]=“foobar”;
}
var uintc8_custom_数组=新uint8clampedaray(200);
uintc8_custom_array.foo=“bar”;
对于(i=0;i<200;i++){
uintc8_自定义_数组[i]=“foobar”;
}
控制

for ( i = 0; i < 200; i++ ){
  val = uintc8_vanilla_array[i];
}
(i=0;i<200;i++)的
{
val=uintc8_数组[i];
}
自定义属性测试

for ( i = 0; i < 200; i++ ){
  val = uintc8_custom_array[i];
}
(i=0;i<200;i++)的
{
val=uintc8_自定义_数组[i];
}
结果


这些附加属性应该可以工作(因为每个类型化数组都是一个对象),但它们将被任何在类型化数组上操作的本机方法忽略。它们也可能导致性能问题,但您应该对此进行测试。我认为使用包装器对象是一个更好的主意。修改实例不会减慢速度,但修改原型可能会减慢速度。