gpt4 book ai didi

javascript - JavaScript 中的对象值和对象数组

转载 作者:行者123 更新时间:2023-11-30 06:52:13 24 4
gpt4 key购买 nike

我正在使用 AngularJS 开发 Web 应用程序。我对 JavaScript 中的引用感到困惑。对象的更改何时会影响其引用?

例如,我的应用程序中有一个 Controller 。我使用该 Controller 上传文件并将文件信息保存在工厂中。

   $scope.fileArray = [];
...
...
uploadFiles(file){
$scope.fileArray.push(file);
..
..
//on success
file.params = data["parameters"]; //an array of strings about file path and name
...
...
}

在 uploadFiles 函数中,我将文件对象插入 fileArray。然后,当我更改或向文件对象添加新属性时,我可以在 fileArray 中看到这些更改。

var fileInfo = {
infoArray : $scope.fileArray
}

fileFactory.keepFileInfo(fileInfo);

然后我将该数组保存在工厂中。但是这次对 $scope.fileArray 的更改没有反射(reflect)在工厂中。这是什么逻辑?

编辑

我错了。 Controller 对象的变化也会影响工厂。我写了这个最小的应用程序是为了清楚地看到它,在我的应用程序中我一定是在其他地方犯了错误。

var testApp = angular.module('testApp', []);

testApp.controller('TestController', function($scope, TestFactory) {
$scope.fileArray = [];

var files = [];
files[0] = {
parameters : {
name : 'file1.txt',
path : "user/files"
}
}

$scope.fileArray.push(files[0]);

files[1] = {
parameters : {
name : 'file2.txt',
path : "user/files"
}
}

$scope.fileArray.push(files[1]);

files[2] = {
parameters : {
name : 'file3.txt',
path : "user/files"
}
}

$scope.fileArray.push(files[2]);

TestFactory.setFileArray($scope.fileArray);

files[0].parameters["name"] = "changed file name";

console.log($scope.fileArray); //here writes "changed file name"
console.log(TestFactory.getFileArray()); //here writes "changed file name", too
});


testApp.factory('TestFactory', function() {
var factory = {};

var fileArray = [];

factory.setFileArray = function(files) {
fileArray = files;
}

factory.getFileArray = function() {
return fileArray;
}

return factory;
});

最佳答案

让我们考虑以下示例:

var a = {};
var b = {c: a};
console.log(a === b.c);
a.d = {};
console.log(b.c);

如果您有一个对象变量并将另一个对象的成员分配给它,那么它们具有完全相同的引用,因此如果您更改其中一个,另一个也会更改。如果您对数组执行此操作,情况也是如此:

var a = {};
var b = [a];
console.log(a === b[0]);
a.d = {};
console.log(b[0]);

关于javascript - JavaScript 中的对象值和对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240276/

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