次の例を検討してください。
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
関数を undefined に設定します。誰かがこの関数をどこかで書き直したとします (これは私が防ぎたいことです)。
2 番目のrun()
ブロックでは、すべてが未定義であり、エラーがスローされます。私はこれに混乱しています...少なくともそれらのいくつか(constant
最初に思い浮かぶもの)は不変オブジェクトであるべきではありませんか?
これは予想される動作ですか、それとも何か間違っていますか?