行。我的内部项目有这个lib
(function() {
var window = this,
undefined; //guaranteed undefined
var h3 = window.h3 = function (user) { return window.h3 = new h3.prototype.init(user); };
h3.prototype = {
init: function(user) {
this.timestamp = +new Date;
this.user = user;
return this;
},
VERSION: '0.0.1', // Current version.
timestamp: undefined,
user: undefined,
a: function() {alert('a');}
};
h3.prototype.init.prototype = h3.prototype;
})();
这是一个用例:
我需要一个lib来存储会话用户数据,并为应用程序提供一些功能,如加载(通过AJAX)信息,显示报告等。应用程序完全由AJAX驱动。在jQuery的帮助下,我将检查用户凭据并使用h3({user:'user_a',foo:'bar'})
调用来启动此lib。因此,我将拥有一个名为h3的全局对象,并且可以将其用于后者(例如h3.a()
)。如果我需要重新启动此对象,我可以通过h3.init({user:'user_b',foo:'bla-bla-bla'})
调用来执行此操作
设计灵感来自着名的jQuery lib
主要问题是 - 这有多好/坏?你能帮我验证这个设计吗?
答案 0 :(得分:2)
我完全不确定原型是什么,或者init
同时是方法和构造函数,或者额外的构造函数包装器的好奇技巧。如果你能提供帮助,最好不要使用太多的JS魔法。
如果看起来只有一个全局实例,请忘记原型设计并简化:
var h3= {
VERSION: '0.0.2',
init: function(user) {
this.user= user;
this.timestamp= +new Date; // note, this. missing in original code
},
a: function() {
alert('a');
}
};
h3.init({user: 'user_a', foo: 'bar'});