可以在公共方法中访问私有类属性吗?

时间:2013-11-27 01:08:22

标签: javascript oop

新手Javascript问题:

如何在公共方法中访问私有类属性?在所有示例中,我看到一个公共原型函数访问public(this.property)。是否可以通过公共方法访问私有财产?

2 个答案:

答案 0 :(得分:3)

此模式称为“特权”方法。它看起来像这样:

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;
};

答案 1 :(得分:0)

这是一个小小的演示:

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(); // ...

希望它可以帮到你。