javascript私有变量如何在原型实现中工作

时间:2013-10-07 16:15:23

标签: javascript inheritance closures prototype

http://msdn.microsoft.com/en-us/magazine/ff696765.aspx

这个网站显示了一个例子

function Circle(radius) {
  this.getRadius = function() {
    return radius;
  };
  this.setRadius = function(value) {
    if (value < 0) {
      throw new Error('radius should be of positive value');
    }
    radius = value;
  };
}

VS

Circle.prototype.getRadius = function() {
  return this._radius;
};
Circle.prototype.setRadius = function(value) {
  if (value < 0) {
    throw new Error('radius should be of positive value');
  }
  this._radius = value;
};

并在页面上说明

“然而,在这种情况下,我们失去了拥有真正私人成员的奢侈,并且不得不求助于其他方式,例如通过惯例表示隐私(强调的财产名称)。通常归结为在两者之间作出选择拥有真正的私人成员或更有效的实施。“

如何使用原型。失去“真正的私人”成员的奢侈品?,做原型。这不被认为是对自我的引用吗?

2 个答案:

答案 0 :(得分:2)

如果对象上的属性对原型对象上的函数中的代码可见,那么代码就可以看到它。

答案 1 :(得分:2)

因为变量this._是Circle实例上设置的属性,因此可以从对象访问。

var c = new Circle();
c.setRadius(100);
console.log( c._radius );//100

因此,它不是一个真正的私有变量,而只是通过约定,任何以_开头的东西都不应该在外部使用。