Как создать объект с закрытыми членами, используя Object.create ()вместо new

РЕДАКТИРОВАТЬ :В конце концов я понял это из ответа Берги.

Спасибо Берги.

pubPrivExample = (function () {
    return {
        init : function () {
            var private;

            this.setPrivate = function (p) {
                private = p;
            };
            this.getPrivate = function () {
                return private;
            };
        },

        public : "This is public\n"
    };
}());

var a;

a = Object.create(pubPrivExample);
a.init();
a.setPrivate("This is private");

document.write(a.getPrivate());

РЕДАКТИРОВАТЬ :Кажется, ответы на мой вопрос не совпадают.Меня действительно не интересует фабрика, и я бы предпочел не использовать ее. Мой вопрос о частном состоянии. Судя по ответам и комментариям Берги, я думаю, что смогу что-то собрать.

Продолжение следует...

РЕДАКТИРОВАТЬ :Берги начал отвечать на вопрос ниже, но пропустил самую важную часть -частное состояние.

У меня было время подумать над этой идеей, но я все еще не могу получить приватное состояние с помощью Object.create ()без какой-либо фабрики. Но я хочу ошибаться, и Берги намекнул на решение... Смело берите ответ Берги за отправную точку.

ОРИГИНАЛ :Стремление избежать newв javascript привело меня в необычное место. Мне нужны члены приватных объектов, но я не хочу сдаваться Object.create().

Вот код.

var trackQueue = {};

trackQueue.factory = function () {
    var that, queue;
    that = this;
    queue = [];

    that.push = function (item) {
        queue.push(item);
    };

    that.work = function () {
        document.write(queue + "<br />");
    };

    return {
        work : that.work,
        push : that.push
    };        
};

var a = Object.create( trackQueue.factory() );
a.push("a");
a.push("b");
a.push("c");

var b = Object.create( trackQueue.factory() );
b.push("d");
b.push("e");
b.push("f");

a.work();
b.work();

И jsfiddle

http://jsfiddle.net/dsjbirch/Wj6cp/10/

Будет ли initболее идиоматичным/подходящим названием для метода factory?

Это безумие?

Будьте добры -JavaScript не мой родной язык.

7
задан bluekeys 13 July 2012 в 22:48
поделиться