这是一个非常基本的问题,但我有些困惑。我的理解是,约定规定类定义使用大写字母,而对象实例不使用大写字母。因此,当我执行以下操作时:
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();
(显然,对于单身的一类来说,这没有多大意义,但是你明白了)
希望能帮助到你
关于javascript - Ember.js中的类和对象混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18408383/