我使用什么JavaScript模式从原型方法访问私有方法?

时间:2015-10-31 23:14:07

标签: javascript

我使用哪种JavaScript模式给我:

  1. 原型上的公共方法
  2. 可以从#1
  3. 调用的私有方法
  4. 私人变量
  5. 我尝试从原型公共方法调用私有方法时,我发现其他答案似乎返回undefined。

1 个答案:

答案 0 :(得分:0)

事实上,您无法从原型中访问私有内容。

原型通过将对象绑定为所有方法的上下文来工作,因此您可以使用this关键字来访问它。

在面向对象的编程中,你称之为private的是在编译时解决的问题,暗示你试图访问的数据不应该从类外部读取。 但在运行时,这些数据将以与其他属性相同的方式存储。

要让方法访问私有字段,您可以直接在实例上创建方法而不是在原型上创建方法以允许它访问私有范围。 这称为特权方法。 查看Douglas Crockford的this article

var ClassExample = function () {

    var privateProperty = 42
    this.publicProperty = 'Hello'

    var privateMethod = function () {
        return privateProperty
    }

    this.privilegedMethod = function () {
        return privateProperty
    }
}

ClassExample.prototype.publicMethod = function() {
    return this.publicProperty
}

诸如Typescript之类的语言,添加类和键入+隐私设置将私有字段存储在公共字段旁边。

class ClassExample {

    private privateProperty
    public publicProperty

    constructor () {
        this.privateProperty = 42
        this.publicProperty = 'Hello'
    }

    method () {
        return this.privateProperty
    }

}

将在

中编译
var ClassExample = (function () {
    function ClassExample() {
        this.privateProperty = 42;
        this.publicProperty = 'Hello';
    }
    ClassExample.prototype.method = function () {
        return this.privateProperty;
    };
    return ClassExample;
})();