js中没有反射的概念,那么angular是如何实现注入依赖的呢?
简单模拟一下~
var app = {
scope : function () {
this.name = 'lala';
},
controller : function (fn) {
str = fn.toString();
str = str.substring(str.indexOf( '(' )+1,str.indexOf( ')' )).replace(/\s/g,'');
var arr = str.split(',');
fn.apply(null, arr.map(function (item) {
return new app[item]();
}));
}
}
app.controller(function (scope ) {
console.log(scope.name);
})
}
/* scope是一个类, controller 是一个负责执行函数的函数, 首先将传入controller的参数,也就是fn函数转成字符串, 将传入fn的实参截取出来,去app里找到相应的类, 实例化后,再做参数传回给fn,并调用fn执行 */