删除对对象上方法的公共访问权限

Ray*_*nos 8 javascript design-patterns object public-method

我想拿一个对象并从中删除一些方法.

即我内部有一个带有getter/setter的对象,我想让外部用户访问它.我不希望他们有权访问setter函数.

我不想通过从中删除方法来更改原始对象引用,但是创建一个新的对象引用,该引用指向同一个对象但其上的方法较少.

  • 我该怎么做呢?
  • 这是一种设计模式吗?
  • 这些问题是否有众所周知的解决方案?

我有这个功能的实现

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;
};
Run Code Online (Sandbox Code Playgroud)

实况例子, _.each _.bindAll

出于所有预期目的,返回的对象应该与原始对象相同,除了一些方法不再存在.内部this引用不应该在任何函数中中断.原型链不应该破裂.

  • 什么是这种功能的直观名称?
  • 对于我当前的实现,我应该注意哪些陷阱?

小智 5

你应该做的是使用只有你想要保留的方法的Facade模式委托模式将这些方法委托给原始对象的实例.借助Javascript提供的丰富反射,您应该可以非常轻松地以编程方式生成这些Facades.