gpt4 book ai didi

javascript - Ember.js 中的类和对象混淆

转载 作者:行者123 更新时间:2023-11-28 08:56:36 25 4
gpt4 key购买 nike

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

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 的理解相对浅薄,但任何帮助将不胜感激。

最佳答案

If so, shouldn't convention dictate that the instance be called authManager?

是的,确实,这一行:

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

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

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

由于您正在创建 App.AuthManager 类定义的实例,因此至少 ember 是这样规定的。

Also, is it typical to put the class definition into the same namespace as the object

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

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

(显然这对于​​一个单例类来说没有多大意义,但你明白了)

希望对你有帮助

关于javascript - Ember.js 中的类和对象混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com