gpt4 book ai didi

JavaScript 变量赋值?

转载 作者:行者123 更新时间:2023-12-05 00:55:56 29 4
gpt4 key购买 nike

看看下面的代码,谁能解释一下 JavaScript 中值是如何传递的。

function loadImages() {
for(var sec in images) {
theme = images[sec];
for(var tsec in theme) {
theme[tsec].img = new Image();
theme[tsec].img.src = 'images/'+theme[tsec].src+'.png';
}
}
}

然后在另一个函数中:

function definitionToSpriteDataMapping() {
var result = {};
for(var definition in blocks) {
var sprite = blocks[definition].sprite;
for(var secnm in images) {
section = images[secnm];
for(var spritenm in section) {
if(sprite == spritenm) {
result[definition] = {};
result[definition].img = section.img;
}
}
}
}
return result;
}

为了简单起见,我删除了一些代码,但它仍然很复杂。基本上有 2 个对象(图像和 block )是嵌套的键:值对。在第一段代码中

theme = images[sec]; 
theme[tsec].img.src = 'images/'+theme[tsec].src+'.png';

在第二行代码中有

section = images[secnm];
result[definition] = {};
result[definition].img = section.img;

在将.img 添加到“theme”的第一个代码块之前,“images”中没有.img。但这似乎反射(reflect)回了第二个代码块中看到的“图像”。 JavaScript 中的所有对象都像指针吗? “结果”与“ block ”的关系是否与“主题”与“图像”的关系相同?如果我从“主题”中删除一个元素,它会反射(reflect)在“图像”中吗?

最佳答案

使用 theme = images[sec] 您确实会在内存中创建一个指向该对象的指针。因此,将 img 添加到 theme 对象也会将 img 添加到该图像,因为它们是同一个对象。所以是的,result 也是如此。
更改、添加或删除以这种方式引用的对象的属性将影响实际对象。数组也是如此。

如果您不喜欢这种行为,您应该克隆该对象。您可以通过复制所有属性来克隆一个简单的对象:

var original = { name: "James", age: 73, male: true };
var clone = { };
for( var k in original )
clone[ k ] = original[ k ];

但如果 original 的任何属性是一个数组或对象本身,它将是一个引用。如果您没有任何对象或数组作为属性,上面的代码片段就可以了。否则,您应该编写一个克隆函数并递归地克隆原始文件的每个成员。

关于JavaScript 变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640595/

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