gpt4 book ai didi

javascript - AngularJS 中带有成员变量的子类工厂

转载 作者:行者123 更新时间:2023-11-29 14:51:44 24 4
gpt4 key购买 nike

我有数十个 AngularJS 工厂,它们有很多共同点。所以我正在尝试创建一个基类并将其子类化。

但我注意到子类共享基类的成员变量。

我在 http://jsbin.com/doxemoza/2/edit 上做了一个例子,代码也贴在这里:

HTML:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body ng-app="demo" ng-controller="MainCtrl">
<p>ChildService: {{value1}}</p>
<p>AnotherChildService : {{value2}}</p>
</body>
</html>

JavaScript:

angular.module('demo', []);

var demo = angular.module('demo').controller('MainCtrl', function ($scope, ChildService, AnotherChildService) {
$scope.value1 = ChildService.getPrivateVar();
$scope.value2 = AnotherChildService.getPrivateVar();
});

var Base = function () {

var Service = {};

Service.privateVar = 0;

Service.setPrivateVar = function (value) {
Service.privateVar = value;
}

Service.getPrivateVar = function () {
return Service.privateVar;
}

return Service;
};

demo.factory('BaseService', Base)


demo.factory('ChildService', function (BaseService) {
var ChildService = Object.create(BaseService);
ChildService.setPrivateVar(1);
return ChildService;
});

demo.factory('AnotherChildService', function (BaseService) {
var AnotherChildService = Object.create(BaseService);
AnotherChildService.setPrivateVar(2);
return AnotherChildService;
});

我的预期输出是:

ChildService: 1

AnotherChildService : 2

但我得到的是:

ChildService: 2

AnotherChildService : 2

我认为 ChildServiceAnotherChildService 共享相同的 privateVar,所以我得到了相同的值。

我应该如何更改代码以使它们使用不同的 privateVar 实例?

谢谢

最佳答案

我遇到了同样的问题,并在以这种方式声明我的 BaseService 时得到解决:

demo = angular.module('demo', []);

demo.factory('BaseService', function(){
return {
privateVar: 0,

setPrivateVar: function (value) {
this.privateVar = value;
},

getPrivateVar: function () {
return this.privateVar;
}
}
});

我的“子”服务与您的一样。一切正常。

关于javascript - AngularJS 中带有成员变量的子类工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646149/

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