Я хочу взять объект и удалить из него некоторые методы.
т.е. у меня внутри есть объект с геттерами / сеттерами, и я хочу предоставить доступ к нему внешним пользователям. Я не хочу, чтобы у них был доступ к функциям установщика.
Я не делаю ' Я не хочу изменить исходную ссылку на объект, удалив из нее методы, но создать новую ссылку на объект, которая указывает на тот же объект, но имеет меньше методов на нем.
У меня есть реализация этой функции
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
не должна нарушать работу какой-либо функции. Цепи прототипа не должны разрываться.