Javascript создание объектов - PullRequest
2 голосов
/ 18 июля 2011

Я создаю объект javascript, который будет хранить информацию о пользователе, вошедшем на мой сайт (для простоты доступа), но для меня было очень трудно понять способы создания объекта в javascript.Я видел примеры с использованием прототипа, а другие - с использованием замыканий, я решил остаться с замыканиями, потому что мне понадобится только один экземпляр этого объекта, и, следовательно, не большие затраты.

Интересно, правильно ли то, что я делаю, и есть ли способ улучшить мой код, это мой код:

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

Edit # 1

Если я хотел бы добавить подобъекты к основному объекту MySite, и эти подобъекты имеют свои собственные методы и свойства, а также доступ к свойствам и методам основного объекта (MySite), яхотелось бы сделать что-то вроде этого:

mysite.timezone.calculeUserTimezone();

Как продолжить?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Использование прототипа

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

Живой пример

0 голосов
/ 18 июля 2011
   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 будет единственным объектом, к которому можно получить доступ везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...