2013-10-07 21 views
1

http://msdn.microsoft.com/en-us/magazine/ff696765.aspx怎么做原型的JavaScript实现私有变量工作

这个网站展示了一个例子

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

,并在页面上它指出

“不过,在这种情况下,我们失去了拥有真正的私人成员的奢侈,并且拥有采用其他方式,例如通过公约表示隐私(强调的财产名称)。它通常归结为在有真正的私人成员还是有更高效的实施之间作出选择。“

如何使用原型this._失去”真正的私人“成员的奢侈品?,prototype.this没有考虑作为参考,以自我?

回答

2

如果一个对象的属性是在原型对象上的功能代码可见,它的代码任何地方可见。

2

自变量this._是一个属性集在Circle实例上,因此可以从对象访问。

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

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

+0

我c,所以没有办法做一个实例变量没有使用这个关键字this._radius,如果你做var _radius,它不会做什么? – user2167582

+0

必须在此上定义Nope实例变量。 var _radius是定义函数的本地变量。 –