我有一组处理某些对象的JavaScript函数。所有这些对象都具有以下灵活性:
data[prop][sub-prop][etc.]
,或者data[TYPE][prop][sub-prop][etc.]
。在很多地方都可以访问该对象,条件(让我们称之为is_mixed
)无处不在。
我想到了以下替代方案:
data
:(is_mixed ? data[TYPE] : data)[prop][sub-prop][etc.]
拥有一个名为getData的函数,并始终像data
一样访问getData()[prop][sub-prop][etc.]
:function getData() { return is_mixed ? data[TYPE] : data; }
。
功能代码为:
if (is_mixed) { data = data[TYPE]; }
对每个新输入运行以下内容:int max = 5; //the fixed size of your array.
int[] inArray = new int[5] {0,0,0,0,0}; //initial values only.
void putValueToArray(int thisData)
{
//let's do the magic here...
Array.Copy(inArray, 1, inArray, 0, max-1);
inArray[max-1] = thisData;
}
在我看来,选项2和3可能是复制对象数据(可能很大)并且性能在这里很重要(我没有找到支持这种猜测的文献),但是选项1将会生成代码又大又丑。
有更好的选择吗?在性能,代码质量和基本最佳实践方面实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
不,他们不会。它们都只是复制一个对象引用,它快速而便宜(比如复制一个布尔值)。 #2当然是略微慢,因为它是一个函数调用,但如果它使用了很多,那么任何体面的JavaScript引擎都会内联函数,给你带来的好处源级的模块化。 (但是在短时间内可以花费数千次调用函数来实现这一功能;例如,现代引擎只有在看起来很重要时才会优化。)在我看来,选项2和3可能正在复制JSON内容