Javascript创建对象

时间:2011-07-18 12:05:43

标签: javascript oop closures

我正在创建一个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();

如何进行?

2 个答案:

答案 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());

我会选择原型方法。你没有利用封口,所以这种方式更整洁。

Live Example

使用闭包

(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());

Live Example

答案 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将是一个可以在任何地方访问的单个对象。