gpt4 book ai didi

javascript - Angular Service - 返回私有(private)值与通过引用私有(private)值进行赋值

转载 作者:行者123 更新时间:2023-11-28 18:26:20 27 4
gpt4 key购买 nike

与同事讨论获取私有(private)数组的返回值与对引用私有(private)数组的变量进行赋值之间的区别,但无法想到以下会产生不同结果的充分理由:

Controller

app.controller("MyController", ["MyService", function(MyService) {
var ctrl = this;
ctrl.arrayAssign = [];

ctrl.doSomething = function() {
// Empty out array, usually assigned at one point, code is omitted for example
ctrl.arrayAssign = []

// This does not work, ctrl.arrayAssign = []
ctrl.arrayAssign = MyService.serviceArray;

// This works, ctrl.arrayAssign correctly assigned to serviceArray in MyService
ctrl.arrayAssign = MyService.getServiceArray();
}
}]);

服务

app.service("MyService", [function(){
var service = this;
var serviceArray = [];

service.serviceArray = serviceArray;

// This is called, either from controller above, or another controller
service.assignToServiceArray = function(arr) {
serviceArray = angular.copy(arr);
};

service.getServiceArray = function() {
return serviceArray;
};

return service;
}]);

注意:ctrl.doSomething() 在 service.assignToServiceArray() 之后调用

对于为什么上面的两个 Controller 分配具有所描述的不同结果,有什么好的解释吗?

我认为 service.serviceArray 会公开私有(private)数组 serviceArray 并且只是成为对私有(private)数组的引用 (service.serviceArray = serviceArray),因此对 serviceArray 的新分配(即来自 service.assignToServiceArray)应该允许 service.serviceArray引用可以由 Controller 直接访问的新数组分配。

service.getServiceArray() 也会公开私有(private)变量 serviceArray,但是直接公开,就像我不尝试访问只是对数组的引用的变量(即上面的 service.serviceArray)。

在这种情况下,尝试分配对私有(private)变量的引用并不理想,而只返回私有(private)值是否会受到青睐?我可能错过了一些非常明显的东西......

最佳答案

当您调用 allocateToServiceArray 时,您将 serviceArray 分配给局部变量以指向新数组,您不会更新引用或更新原始数组,因此 service.serviceArray 仍指向您开始使用的空数组...如果你在没有赋值的情况下执行 angular.copy(arr,serviceArray) ,你会得到实际数组保持不变(相同数组对象)的结果,但它的内容被清空并重新填充,在这种情况下 service.serviceArray 和 serviceArray 都会有更新的数组。如果我错过了这个问题,请告诉我。

关于javascript - Angular Service - 返回私有(private)值与通过引用私有(private)值进行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029671/

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