??????????????????????????????????????????????Щ?????????????????JavaScript????????????????JavaScript??д???????????????????????????д?????????????Щ??????????????????????????????????????????????????????????????????Ч???????Щ?????????????????????????????????????????Ч???????????????????????????Щ??????????????“???????”??????????????????AngularJS????????????????????????????????????????????????????????????????????????????????PHP???????????á?????????????????????????????????????У?????????????JavaScript?е??????????????????????????α?д“?????????”?????
????????趨
?????????????????????????顣??????????????????Ajax???????????????????????????·?ɡ?
????var service = function() {
????return { name: 'Service' };
????}
????var router = function() {
????return { name: 'Router' };
????}
??????????????д?????????????????????????????????飺
????var doSomething = function(other) {
????var s = service();
????var r = router();
????};
?????????????????????????????Щ?????????????????????????????????????????????????????????????????????????????????????ò?????????????????????????????ServiceXML????ServiceJSON?????????????????????????????????????Щ????????????????????????????????????????????????????????????????????????????????????????????????????????
????var doSomething = function(service?? router?? other) {
????var s = service();
????var r = router();
????};
???????????????У???????????????????????????顣?????????????????μ????????????????????粿?????????doSomething???????????????????????????????????????????????????е?????????????????????????????????????????δ?????????????????????顣??????????????????????????????????????????????????????
????????????????????????
???????????????y??????????????????????????????????????
???????????????????ü????
????????????????????????????????
????????????????????????????????????????????????????????
????requirejs/AMD????
?????????????????????????????requirejs???????????????????????????????
????define(['service'?? 'router']?? function(service?? router) {      
????// ...
????});
????requirejs????????????????????????????????飬????д???????????????У?????????????????????????????д???????injector????飬?????????????????
????var doSomething = injector.resolve(['service'?? 'router']?? function(service?? router?? other) {
????expect(service().name).to.be('Service');
????expect(router().name).to.be('Router');
????expect(other).to.be('Other');
????});
????doSomething("Other");
????????????????????????????????doSomething??????????????????expect.js?????????????????????????????????????TDD(????????????)?????
????????????????????д?????injector??顣?????????????????壬??????????????????????????????????????
????var injector = {
????dependencies: {}??
????register: function(key?? value) {
????this.dependencies[key] = value;
????}??
????resolve: function(deps?? func?? scope) {
????}
????}
?????????????????????????????????????????????洢????????????????????????????deps???飬?????dependencies???????????????????????????.apply?????????????????func??????
????resolve: function(deps?? func?? scope) {
????var args = [];
????for(var i=0; i<deps.length?? d=deps[i]; i++) {
????if(this.dependencies[d]) {
????args.push(this.dependencies[d]);
????} else {
????throw new Error('Can't resolve ' + d);
????}
????}
????return function() {
????func.apply(scope || {}?? args.concat(Array.prototype.slice.call(arguments?? 0)));
????}       
????}
?????????????????????????????????????????????С?