簡體   English   中英

Ember.js中的類和對象混淆

[英]Class and Object confusion within Ember.js

這是一個非常基本的問題,但我有些困惑。 我的理解是,約定規定類定義使用大寫字母,而對象實例不使用大寫字母。 因此,當我執行以下操作時:

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的相對淺薄的理解,但是任何幫助都將不勝感激。

如果是這樣,約定是否應規定該實例稱為authManager?

是的,的確如此:

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

應該閱讀,主要是為了避免混淆(盡管這是一個單例,也可以將單例大寫)

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

由於您正在創建App.AuthManager類定義的實例,因此至少這是ember指示的方式。

另外,通常將類定義放入與對象相同的名稱空間中

我猜不是, (但是Javascript讓您做各種各樣的事情)因此是Object實例的小寫命名,而不是像類定義一樣的大寫。 因此,稍后您可以創建同一類的更多實例,例如:

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

(顯然,對於單身的班級來說,這沒有多大意義,但您明白了)

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM