コードは次のとおりです。
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 関数は this.radius ではなく _radius に依存することに注意してください。