6

JavaScript オブジェクトは初めてです。JavaScript Math オブジェクトのようなオブジェクトを作成したいと考えています。しかし、それは機能していません (何も返されません)。

Area というオブジェクトを作成し、メソッド square とrectangle を与えたいと思います。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>
4

5 に答える 5

7

Areaこれにより、メソッドで呼び出されるオブジェクトが作成されます。

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

Area呼び出し可能にしたい場合を除き、関数にしないでください。

于 2013-01-18T01:34:31.510 に答える
6

ここでやりたいことは、Area説明したメソッドが割り当てられた名前のオブジェクトを作成することです。これを行う最も簡単でクリーンな方法は次のようになります。

var Area = {

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

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

};

Area.square()説明したように andを使用できるようになりArea.rectangle()ました。

于 2013-01-18T01:34:58.703 に答える
3

あなたの関数は、包含関数内のスコープ内にのみありますArea. オブジェクトを介してアクセスできるようにするには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ようにします。

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();
于 2013-01-18T01:35:15.553 に答える
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;
    }
}
于 2013-01-18T01:38:39.160 に答える
0

メソッド (例: ) の名前空間を単純に作成する代わりに、var Area = { ... }静的メソッドを既存のクラスに追加できます。

function Area() { ... };

Area.square = function(a) {
    return a * a;
};
于 2013-01-18T01:41:31.530 に答える