2016-09-26 11 views
1

時にのみ、特定のオブジェクトフィールドの値を変更します。JavaScriptを - 私はこのコードを持っているJSランタイム

<script type="text/javascript"> 

    var triangle = new Object(); 

    triangle.sideA = 3; 
    triangle.sideB = 4; 
    triangle.sideC = 5; 

    triangle. getArea = function() { 
    // Return the area of a triangle using Heron's formula 
    var sp = (this.sideA + this.sideB + this.sideC)/2; 
    var calc = sp * (sp - this.sideA) * (sp - this.sideB) * (sp - this.sideC); 
    return Math.sqrt(calc); 
    }; 

    alert ("area is: " + triangle.getArea()); 

    //triangle.sideA = 30; 
    //triangle.sideB = 40; 
    triangle.sideC = 50; 

    alert ("now area is: " + triangle.getArea()); 

</script> 

まずalert呼び出しが正しい値を表示します。 第2のalertコールディスプレイNaN

私は2つのライン(sideAsideBにも新しい値を設定することをコメントし、その後、第二alert呼び出しは、正しい値を表示コメントを解除した場合。

私は何をやっている/私は間違って理解したのですか?

ありがとうございます。あなたは50

参照する側のCを設定した場合

+2

2番目のシーンでは、三角形がありません。あなたは3,4の50の側面からそれを構築することはできません。 https://en.wikipedia.org/wiki/Triangle_inequality –

+0

'calc'はおそらく否定的です。負の数から平方根を得ることはできません。この問題は特にオブジェクトとは関係ありません。 –

+0

確かに、私はあまりにも精神的にこだわっていて、JSオブジェクト/スコープに関連した問題を抱えていました。私はこの明らかな事実を単に逃しました... – Serban

答えて

0

あなたが持っている数式は、負の数の平方根を計算しようとしています。あなたがしていることを示すために余分なアラートを追加しました。負の数で

var triangle = new Object(); 
 

 
    triangle.sideA = 3; 
 
    triangle.sideB = 4; 
 
    triangle.sideC = 5; 
 

 
    triangle. getArea = function() { 
 
    // Return the area of a triangle using Heron's formula 
 
    var sp = (this.sideA + this.sideB + this.sideC)/2; 
 
    var calc = sp * (sp - this.sideA) * (sp - this.sideB) * (sp - this.sideC); 
 
    alert(calc); 
 
    return Math.sqrt(calc); 
 
    }; 
 

 
    alert ("area is: " + triangle.getArea()); 
 

 
    //triangle.sideA = 30; 
 
    //triangle.sideB = 40; 
 
    triangle.sideC = 50; 
 

 
    alert ("now area is: " + triangle.getArea());

+0

ありがとう、ありがとう。私はJSについて学んだ小さなものをテストすることでとても吸収され、そのような三角形が存在しないという事実を完全に忘れてしまった... – Serban

1

calcのためのあなたの式は負の数を返します。

Math.sqrt負の引数の場合は、NaNを返します。

0

calc結果 "-382815.5625"。

従ってMath.sqrt(calc) = NaN。

は、あなたのオブジェクトを与えたtriangleプロパティ(SIDEA = 3SideBの= 4sideC = 5)、そのあとは、にsideCを変更しましたが、SIDEAとSideBのは、それぞれ3 & 4のまま。その後、我々はその後、数が負でないので、あなたが2行のコメントを解除するときあなたのコードが動作する

var sp = (3 + 4 + 50)/2; = 28.5 var calc = 28.5 * (28.5 - 3) * (28.5 - 4) * (28.5 - 50); = -382815.5625

を持っています。

コードをテストしている間にとコンソールの代わりにalert()を使用することをお勧めします。これははるかに簡単です。

関連する問題