可以访问公共方法中的私有类属性

Can one access a private class property in a public method?

本文关键字:属性 方法 访问      更新时间:2023-11-06

新手Javascript问题:

如何在公共方法中访问私有类属性?在所有的例子中,我看到一个公共原型函数正在访问public(this.property)。有可能在public方法中访问私有属性吗?

这种模式被称为"特权"方法。它看起来像这样:

function MyClass() {
  var secret = "foo";
  this.tellSecret = function() {
    return secret;
  };
}
var inst = new MyClass();
console.log(inst.tellSecret()); // => "foo"
console.log(inst.secret);       // => undefined

这是因为私有变量位于闭包中。这样做的问题是,我们将特权方法放在每个实例上,而不是原型上。这并不理想。通常,作者不会在JavaScript中使用私有变量,而是只使用前导下划线,这通常用于暗示公共方法/属性应被视为私有:

function MyClass() {
  this._secret = "foo";
}
MyClass.prototype.tellSecret = function() {
  return this._secret;
};

这里有一个小演示:

var Foo = function(name){ 
    this.name = name; 
    var t = name; 
    if(typeof(this.show) != 'function'){
        Foo.prototype.show = function(){
            console.log(t);
            console.log(this.name);
        };
    }
};
var a = new Foo('a');
var b = new Foo('b');
b.show(); // ...

希望它能帮助你。