小编典典

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

javascript

有什么方法可以使“私有”变量(在构造函数中定义的变量)可供原型定义的方法使用?

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

这有效:

t.nonProtoHello()

但这不是:

t.prototypeHello()

我习惯于在构造函数中定义方法,但出于以下两个原因而逐渐远离它。


阅读 295

收藏
2020-04-25

共1个答案

小编典典

不,没有办法。这基本上是相反的范围。

在构造函数内部定义的方法可以访问私有变量,因为所有函数都可以访问定义它们的作用域。

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

您仍然可以拥有私有变量,但是如果希望在原型上定义的方法可以访问它们,则应该在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()); };
2020-04-25