如何提升对象定义?

How can I hoist an object definition?

在我正在构建的 Angular 应用程序中的 js 文件中,我想在顶部声明 controllers、services 等,然后定义他们在下面。

我现在有这个工作,很好。问题是,当我开始一个新文件时,我通常会复制现有文件的内容并更改函数的名称。但是,我必须经历一大堆函数名称,这很痛苦。我宁愿简单地更改包含这些函数的对象的名称,然后只更改

oldapp.controller

newapp.controller

为了更好地说明,这是我现在的

var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);

pos_filejs_config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(pos_filejs_config);

pos_filejs_controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', pos_filejs_controller);

//----------------------------------------------------
//  FUNCTIONS
//----------------------------------------------------

function pos_filejs_config($stateProvider, $urlRouterProvider){
  // implementation
}

function pos_filejs_controller($scope){
  //implementation
}

这是我想要的:

var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);

HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
pos__filejs_HomeApp.config(HomeApp.config);

HomeApp.controller.$inject = ['$scope'];
pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);

//----------------------------------------------------
//  FUNCTIONS
//----------------------------------------------------

var HomeApp = {
  config: function ($stateProvider, $urlRouterProvider){
    // implementation
  },
  controller: function ($scope){
    //implementation
  }
}

这更干净了,尤其是当文件变得越来越大并且添加了更多的服务和配置时。

问题是,我似乎无法将对象实现放在 angular 下方,因为对象不是 "hoisted" - 即对 HomeApp 的引用文件的顶部是 undefined,因为 HomeApp 仅在下方定义(function name(){...} 不是这样。

如何提升对象以便在文件的更高位置使用它?

HomeApp 已提升,但 HomeApp 已提升为 "undefined"。提升不会为您定义价值。根据我的说法,您可以将代码视为

    var HomeApp = undefined;   
var pos__filejs_HomeApp = angular.module('ros.filejs.HomeApp', ['ui.router']);

    HomeApp.config.$inject = ['$stateProvider', '$urlRouterProvider'];
//Here HomeApp is undefined, Since you haven't assign any value;

    pos__filejs_HomeApp.config(HomeApp.config);
    HomeApp.controller.$inject = ['$scope'];
    pos__filejs_HomeApp.controller('ros.postjs.ctrl', HomeApp.controller);
//...

I am not sure why you wanna to write a code which is hard to understand :-D