考虑以下示例:
angular.module('demo')
.service('MyService', function () {
this.fn = function () {
console.log('MyService:fn');
};
})
.factory('MyFactory', function () {
function fn() {
console.log('MyFactory:fn');
}
return { fn: fn };
})
.value('MyValue', {
fn: function () {
console.log('MyValue:fn');
}
})
.constant('MyConstant', {
fn: function () {
console.log('MyConstant:fn');
}
})
.run(function (MyService, MyFactory, MyValue, MyConstant) {
MyService.fn();
MyFactory.fn();
MyValue.fn();
MyConstant.fn();
MyService.fn = undefined;
MyFactory.fn = undefined;
MyValue.fn = undefined;
MyConstant.fn = undefined;
})
.run(function (MyService, MyFactory, MyValue, MyConstant) {
MyService.fn();
MyFactory.fn();
MyValue.fn();
MyConstant.fn();
});
当第一个run()
被执行时,所有 4 个控制台日志都将被执行并在控制台上打印一些东西。然后为了简化目的,我将每个提供程序fn
函数设置为未定义,比如说有人在某处重写了这个函数(这是我想要阻止的)。
在第二个run()
块上,一切都是未定义的,将抛出错误。我对此感到困惑......至少其中一些(constant
首先想到的)不应该是不可变的对象吗?
这是预期的行为还是我做错了什么?