以下是代码:
var Circle = function( radius )
{
var _radius = radius,
_area = function()
{
return Math.PI * _radius * _radius;
},
_perimeter = function()
{
return 2 * Math.PI * _radius;
};
this.radius = _radius;
this.area = "Area" + _area();
this.perimeter = "Perimeter" + _perimeter();
this.setRadius = function( radius ) {
_radius = radius;
};
};
但是我无法使用this.setRadius()函数成功改变私有属性。例如,我运行这个:
var circle = new Circle(5);
alert(circle.area);
circle.setRadius(10);
alert(circle.radius);
它输出正确的78.blah,然后输出半径为5。
任何建议都将不胜感激!我认为既然_area属性是一个函数,它每次都会重新计算,但我猜它不是?但是为什么this.radius在显然被重置时没有返回新的半径?
谢谢!
编辑:
好的,谢谢为什么半径不能正常工作。这有点显而易见。正如所指出的,我永远不会更新this.radius。但是,重点仍然是_area和_perimeter值也不会更新。
我跑:
var circle = new Circle(5);
alert(circle.area);
circle.setRadius(10);
alert(circle.area);
即使在更新半径后我仍然会得到旧区域。请注意,_area函数依赖于_radius而不是this.radius。
答案 0 :(得分:1)
简单的答案是因为你没有在setRadius函数中设置radius属性。
您设置私有属性_radius,但您的函数中没有任何内容可以更新this.radius。
编辑:我更新了我将如何解决这个问题的答案。我猜可能更好,但只是一种简单的方法。var Circle = function( radius )
{
var radius, area, perimeter;
this.setRadius = function( radius ) {
var _radius = radius,
_area = function()
{
return Math.PI * _radius * _radius;
},
_perimeter = function()
{
return 2 * Math.PI * _radius;
};
this.radius = _radius;
this.area = "Area" + _area();
this.perimeter = "Perimeter" + _perimeter();
};
this.setRadius(radius);
};
答案 1 :(得分:1)
谢谢大家,我决定采用以下方式:
var Circle = function( radius )
{
var _radius = radius;
this.radius = function()
{
return _radius;
};
this.area = function()
{
return Math.PI * _radius * _radius;
}
this.perimeter = function()
{
return 2 * Math.PI * _radius;
}
this.setRadius = function( radius ) {
_radius = radius;
};
};
现在有效。感谢您的提示!