javascript – 从原型定义的函数访问私有成员变量

有什么办法使“私有”变量(那些在构造函数中定义),可用于原型定义的方法?

TestClass = function(){
    var privateField = "hello";
    this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

这工作:

t.nonProtoHello()

但这不:

t.prototypeHello()

我习惯于在构造函数中定义我的方法,但是由于几个原因我离开了。

感谢sktrdie,

这工作,这将是很好,不必创建this.accessPrivateField。如果我的“hello”函数在构造函数内部定义,privateField在函数的作用域链中,所以我可以将privateField作为我将在java中的私有字段。设置访问器(this.accessPrivateField)有点麻烦,然后,privateField不再是真正的私人。

我知道javascript不是java,但我喜欢java!

最佳答案
不,没有办法。这本质上是相反的范围。

在构造函数中定义的方法可以访问私有变量,因为所有函数都可以访问它们被定义的范围。

在原型上定义的方法不在构造函数的范围内定义,并且不能访问构造函数的局部变量。

你仍然可以有私有变量,但如果你想要在原型上定义的方法可以访问它们,你应该在this对象上定义getter和setter,原型方法(以及其他一切)都可以访问。例如:

function Person(name, secret) {
    // public
    this.name = name;

    // private
    var secret = secret;

    // public methods have access to private members
    this.setSecret = function(s) {
        secret = s;
    }

    this.getSecret = function() {
        return secret;
    }
}

// Must use getters/setters 
Person.prototype.spillSecret = function() { alert(this.getSecret()); };

转载注明原文:javascript – 从原型定义的函数访问私有成员变量 - 代码日志