我正在创建一个javascript对象,它将存储有关登录到我网站的用户的信息(以便于访问),但对我来说,理解在javascript中创建对象的方法非常困难。我已经看过使用原型方法的示例,并且使用闭包方式,我决定继续使用闭包,因为我只需要这个对象的单个实例,因此,不需要很大的开销。 / p>
我想知道我所做的是否正确,如果有任何方法可以改进我的代码,那么这就是我的代码:
(function(window){
var mysite = (function() {
var me = this;
return { //public interface
init : function(userInfo){
me.user = userInfo;
return this;
},
sayHello : function(){
return 'Hello, my name is ' + me.user.name + ' and I am ' + me.user.age + ' years old.';
}
}
}());
window.mysite = function(userInfo){
return mysite.init(userInfo);
}
})(window);
var mysite = mysite({name : 'Jonathan', age : 17});
mysite.sayHello();
编辑#1
如果我想将子对象添加到主对象MySite中,并且这些子对象有自己的方法和属性,以及对主对象(MySite)的属性和方法的访问,我想做这样的事情:
mysite.timezone.calculeUserTimezone();
如何进行?
答案 0 :(得分:1)
使用原型
(function(window) {
var MySite = function(opt) {
this.user = opt;
};
MySite.prototype.sayHello = function() {
return 'Hello, my name is ' + this.user.name + ' and I am ' + this.user.age + ' years old.';
};
window.mysite = function(options) {
return new MySite(options);
}
})(window);
var a = mysite({
name: 'Jonathan',
age: 17
});
console.log(a.sayHello());
我会选择原型方法。你没有利用封口,所以这种方式更整洁。
使用闭包
(function(window) {
var MySite = function(opt) {
var user = opt;
this.sayHello = function() {
return 'Hello, my name is ' + user.name + ' and I am ' + user.age + ' years old.';
}
};
window.mysite = function(options) {
return new MySite(options);
}
})(window);
var a = mysite({
name: 'Jonathan',
age: 17
});
console.log(a.sayHello());
答案 1 :(得分:0)
var mysite = (function() {
var me = this;
return { //public interface
init : function(userInfo){
me.user = userInfo;
return this;
},
sayHello : function(){
return alert(me.user.name);
}
}
})();
mysite.init({name : 'Jonathan', age : 17});
mysite.sayHello();
我认为这也很好,因为mysite将是一个可以在任何地方访问的单个对象。