gpt4 book ai didi

javascript - 我如何重用 JavaScript 中的对象?

转载 作者:行者123 更新时间:2023-11-30 10:55:54 26 4
gpt4 key购买 nike

我对 JavaScript 并不陌生,但我从未真正深入了解它的工作原理。我目前正在为手机开发一些完全用 JavaScript 完成的软件。一切都运行良好,除了偶尔垃圾收集器启动,一切都会暂时停止。

问题是对象不断地被销毁和创建。有许多对象也相似,但不相同。

解决方案很简单:每当不再需要某个对象时,将其放入充当回收站的链表中。每当我们准备好创建另一个相似类型的对象(大多数相同的属性)时,从列表中获取该对象并根据需要进行设置。但是,我对转换部分并不完全确定。

我知道 JavaScript 中的每个对象本质上只是一个哈希表,但我仍然不确定应该如何解决这个问题。我将在下面举一个问题的例子:

var type1 = Class.create({ ... });
var type2 = Class.create({ some of the same properties + some different ones });

现在我有一个未使用的 type1,我想将它用作 type2。这样做的最佳方法是什么?

最佳答案

这实际上取决于您如何使用代码中的对象。如果你真的很严格并且在检测对象类型方面没有做聪明的事情......那么建议你简单地重新使用这些对象是安全的,就像鸭子打字风格一样。只需填写缺失的“一些不同的”可能就足够了。

另一方面,如果您不确定或有与对象的属性混在一起的代码,例如:

if (obj.color == "white" && obj.legs == 2 && obj.family != "swan")
{
// we have a duck!
}

然后您将需要严格控制如何“塑造”您的对象。

您基本上可以使用 delete 语句从对象中删除“键”

myObj.a = "HELLO";
alert(myObj["a"]); // => alerts "HELLO"

delete myObj.a;
alert(myObj["a"]); // => alerts "undefined"

然后您可以使用一个简单的 for 循环来“重置”对象,然后再将其重新用作其他对象:

for (var key in myObj)
delete myObj[key];

您还可以使用 if 运算符进行简单的差异检查:

var refObj = { /* obj of desired type */ };
var newObj = { /* obj fetched from recycler */ };

for (var key in newObj)
if (refObj[key] == undefined)
delete newObj[key]; // removes alien keys found in newObj
else
newObj[key] = refObj[key]; // add/resets keys so it looks like refObj

但是我宁愿建议您只重复使用完全相同类型的对象或重新考虑您的类/对象层次结构以避免这种开销。

我觉得这样做会变得太聪明了。回收对象不是 JS 运行时的工作,而不是开发人员的工作吗?

关于javascript - 我如何重用 JavaScript 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com