[英]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.