ソース@GitHubから直接:
最も単純な形式は、関数の引数から依存関係を抽出することです。これは、メソッドを使用して関数を文字列に変換しtoString()
、引数名を抽出することによって行われます。
// Given
function MyController($scope, $route) {
// ...
}
// Then
expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
そして、注釈機能
function annotate(fn) {
var $inject,
fnText,
argDecl,
last;
if (typeof fn == 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){
arg.replace(FN_ARG, function(all, underscore, name){
$inject.push(name);
});
});
fn.$inject = $inject;
}
} else if (isArray(fn)) {
last = fn.length - 1;
assertArgFn(fn[last], 'fn')
$inject = fn.slice(0, last);
} else {
assertArgFn(fn, 'fn', true);
}
return $inject;
}
45行目以降に見られるように