удаление общего доступа к методам объекта

Я хочу взять объект и удалить из него некоторые методы.

т.е. у меня внутри есть объект с геттерами / сеттерами, и я хочу предоставить доступ к нему внешним пользователям. Я не хочу, чтобы у них был доступ к функциям установщика.

Я не делаю ' Я не хочу изменить исходную ссылку на объект, удалив из нее методы, но создать новую ссылку на объект, которая указывает на тот же объект, но имеет меньше методов на нем.

  • Как мне это сделать?
  • Это дизайн- шаблон?
  • Есть ли хорошо известные решения для подобных проблем?

У меня есть реализация этой функции

var readOnly = function(obj, publicData) {
    // create a new object so that obj isn't effected
    var object = new obj.constructor;
    // remove all its public keys
    _.each(object, function(val, key) {
        delete object[key];    
    });
    // bind all references to obj
    _.bindAll(obj);
    // for each public method give access to it
    _.each(publicData, function(val) {
        object[val] = obj[val];    
    });
    return object;
};

См. живой пример , _. each _. bindAll

Для всех предполагаемых целей возвращаемый объект должен быть таким же, как исходный объект, за исключением того, что некоторых методов больше нет. Внутренняя ссылка this не должна нарушать работу какой-либо функции. Цепи прототипа не должны разрываться.

  • Каким будет интуитивно понятное имя для такой функции?
  • Есть ли какие-нибудь подводные камни в моей текущей реализации, о которых мне следует знать?

8
задан wattostudios 30 April 2012 в 14:18
поделиться