这是代码:
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。