2013-01-18 4 views
5

JavaScriptオブジェクトが新しく追加されました。 JavaScript Mathオブジェクトのようなオブジェクトを作成したいと思います。しかし、それは働いていません(何も返しません)。JavaScriptオブジェクト - 作成せずに呼び出す(Mathオブジェクトのように)

Areaというオブジェクトを作成し、正方形と長方形のメソッドを渡したいとします。私はMathオブジェクトが使われるのと同じ方法で使いたいです。それは簡単ですので、私は例えばエリアを選択しました

var squareArea = Area.square(10); // 100 

:私はどうなるの正方形の面積を見つけるために。

次のように私のスクリプトは次のとおりです。

<script> 
window.onload = function() { 


    function Area() { 

     function square(a) { 
      area = a * a; 
      return area; 
     } 

     function rectangle(a, b) { 
      area = a * b; 
      return area;  
     } 

    } 

    rectangleArea = Area.rectangle(10, 20); 

    alert(rectangleArea); 

} 
</script> 
+1

オブジェクトの詳細については、https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objectsをご覧ください。 –

答えて

6

あなたがここで行いたいのは、説明した方法を割り当てたAreaという名前のオブジェクトを作成することです。これを行う最も簡単かつクリーンな方法はそうのようになる:あなたが説明するようになりましたArea.square()Area.rectangle()を使用することができます

var Area = { 

    square: function(a) 
    { 
     return a * a; 
    }, 

    rectangle: function(a, b) 
    { 
     return a * b; 
    } 

}; 

7

これはその上にメソッドをAreaと呼ばれるオブジェクトを作成します。あなたがArea呼び出し可能な場合を除き

var Area = { 
    staticMethod: function() { } 
}; 

は、その機能しないでください。

3

機能は、含まれている関数Areaの有効範囲内にあります。あなたはArea機能を作ったので、「クラス」を使用しようとしているよう

var Area = { 
    square: function(a) { 
     area = a * a; 
     return area; 
    }, 
    rectangle: function(a, b) { 
     area = a * b; 
     return area;  
    } 
} 

rectangleArea = Area.rectangle(10, 20); 
alert(rectangleArea); 

に見えます:Areaオブジェクトを介してそれらにアクセスできるようにするにAreaの性質としての機能を設定します。あなたはAreaの複数のインスタンスを必要としないので、それを行う必要はありませんが、あなたがしたい場合には、次の操作を行います。

function AreaClass(){ 
    // just an empty constructor 
} 
AreaClass.prototype.square = function(a) { 
    area = a * a; 
    return area; 
} 
AreaClass.prototype.rectangle = function(a, b) { 
    area = a * b; 
    return area;  
} 
var Area = new AreaClass(); 
2

はオクラホマので、そこにコードとの回答の多くは、ですが、少し説明:

Areaを関数にすると、関数を付けたオブジェクトでなければなりません。

Area関数の本体では、より多くの関数を宣言していますが、関数はAreaの中にあるため、すぐに削除されます。

var Area = {}; 

は、その後に機能を付ける:

Area.square = function(var a) { 
    area = a * a; 
    return area; 
}; 

などなど、あなたが望むもの

は、オブジェクトを作ることです。

このように、呼び出す関数はAreaオブジェクトのプロパティです。

それともインラインでそれを行うことができます。単にあなたのメソッドの名前空間を作成する代わりに

var Area = { 
    square: function(var a) { 
     area = a * a; 
     return area; 
    } 
} 
0

(例えば、var Area = { ... })、あなたは一例

function Area() { ... }; 

Area.square = function(a) { 
    return a * a; 
}; 
のために、既存のクラスに静的メソッドを追加することができます
関連する問題