Object.create и частные функции в модулях - PullRequest
1 голос
/ 22 марта 2011

Это отдельная реализация ES5 Object.create:

window.createObject = (function() {
    var F = function () {};
    return function(o) {
        F.prototype = o;
        return new F();
    }
}());

и пример ее использования:

var cat = createObject(animal);

Я заметил, что внутренние компоненты animalнемного запутаться при попытке вызвать частные функции, например:

animal = (function() {
    function privFunc(arg) {
        this.property;
    }

    function publFunc(arg) {
        privFunc.call(this, arg);
    }

    return {
        publFunc: publFunc
    }
}());

Есть ли более чистый способ следовать этому типу паттернов?В частности, устранение необходимости в privFunc.call(this, arg).

Другой способ, столь же уродливый, это:

function privFunc(animal, arg) {
    animal.property;
}

function publFunc(arg) {
    privFunc(this, arg);
}

1 Ответ

1 голос
/ 19 апреля 2011

К сожалению, это единственный способ объединить Object.create и частные функции. Созданный новый объект имеет доступ только к открытым методам, которые предоставил модуль, определяющий прототип. Использование закрытых методов в модуле требует передачи этим методам объекта, с которым вы хотели бы работать, - в качестве именованного параметра или манипуляции со значением this

...