繁体   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