只需阅读以下角度源代码中的代码即可。这是依赖注入的一部分。基本上,这更多是关于正则表达式的。
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var $injectorMinErr = minErr('$injector');
function annotate(fn) {
var $inject,
fnText,
argDecl,
last;
if (typeof fn === 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
if (fn.length) {
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;
}
我尝试在chrome控制台中运行以下代码,令我感到困惑的是第二个元素是从哪里来的?
根据我的理解,我认为它应该只返回第一个元素function testService(testService, loginService)
。
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var testFunc = function testService (testService, loginService) {
loginService.login();
}
var str = testFunc.toString();
var arr = str.match(FN_ARGS);
console.log(arr);
//["function testService(testService, loginService)", "testService, loginService"]
有人可以帮我吗,谢谢。
match
如果在索引0处匹配,则返回整个字符串。其他索引表示已匹配的正则表达式组。您可以在带括号的正则表达式中声明一个组。在这种情况下,组为([^\)]*)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句