1

这是一个非常基本的问题,但我有点困惑。我的理解是约定规定类定义大写,但对象实例不是。因此,当我执行以下操作时:

App = require("app");
module.exports = App.AuthManager = Ember.Object.extend({
  apiKey: null,

  // Load the current user if the cookies exist and is valid
  init: function() {
    this._super();
    var accessToken = $.cookie('access_token');
    var authUserId  = $.cookie('auth_user');
    if (!Ember.isEmpty(accessToken) && !Ember.isEmpty(authUserId)) {
        this.authenticate(accessToken, authUserId);
    }
  },

  // ... 
}

我假设我只是在定义 AuthManager 的类定义。然后,如果我这样做:

module.exports = App.ApplicationRoute = Ember.Route.extend({
    init: function() {
        this._super(); 
        App.AuthManager = App.AuthManager.create(); 
    }
});

我的理解是App.AuthManager = App.AuthManager.create();实例化实例,ApplicationRouter 几乎是在 ember 应用程序中执行的第一件事。那正确吗?如果是这样,约定不应该规定调用实例authManager吗?此外,将类定义放入与对象相同的命名空间是否很典型?我怀疑这可能归结为我对 JS 的理解相对较浅,但我们将不胜感激。

4

1 回答 1

0

如果是这样,不应该约定将实例称为 authManager 吗?

是的,这一行:

 App.AuthManager = App.AuthManager.create();

应该阅读,主要是为了避免混淆(尽管它是一个单例并且单例也可以大写)

 App.authManager = App.AuthManager.create(); 

因为您正在创建App.AuthManager类定义的实例,所以这至少是 ember 的规定。

此外,将类定义放在与对象相同的命名空间中是否很典型?

我猜不是,(但是Javascript让你做各种各样的事情)因此对象实例的小写命名,而不是像类定义一样的大写字母。因此,稍后您可以创建同一类的更多实例,例如:

App.foo = App.AuthManager.create();
App.bar = App.AuthManager.create();

(显然这对于​​一个打算成为单例的类没有多大意义,但你明白了)

希望能帮助到你

于 2013-08-23T17:30:00.000 回答