【发布时间】:2020-12-14 10:30:19
【问题描述】:
我尝试在两个 AngularJS 服务和一个通用服务之间实现原型继承,但这似乎不足以满足我的需求。
我制作了ChildService、SecondChildService 和ParentService。
-
ChildService通过原型继承扩展ParentService -
SecondChildService通过原型继承扩展ParentService
ParentService 有一个方法让我们称之为logIt() 记录属性it
-
ChildService实现了自己的it版本 -
SecondChildService实现了自己的it版本
现在我将ParentService 视为“基类”,并且我在ParentService 中有一个调用logIt() 的方法,即initialize()。这仅在ParentService中实现
我需要运行ChildService.initialize() 并看到ChildService 的it 被记录。
与SecondChildService 相同。
而ParentService 记录了它自己的it 版本。我相信原型继承的原因是组合实现而不是真正的继承
您能否提出一个解决方法?
编辑:
这是我的父服务
angular.module('common').service('parentService', ParentService);
ParentService.$inject = [];
/* @ngInject */
function ParentService() {
'use strict';
var vm = this;
vm.it = "parent";
vm.initialize = function () {
vm.logIt();
};
vm.logIt = function () {
console.log(this.it);
};
}
这是我的儿童服务
angular.module('common').service('childService', ChildService);
ChildService.$inject = ['parentService'];
/* @ngInject */
function ChildService(parentService) {
'use strict';
var vm = this;
angular.extend(this, parentService);
vm.it = "child";
}
这就是我运行childService.initialize()时在日志中得到的内容
parent
我希望得到child
【问题讨论】:
-
如果您包含重现问题的代码会很有帮助。
-
我认为你误解了
angular.extend的作用。在 Javascript 中,原型设置为Object.setPrototypeOf而不是angular.extend。这就是class B extends A在后台使用的内容。
标签: javascript composition prototypal-inheritance