JavaScript对象 - 无需创建就调用(如Math对象)

时间:2013-01-18 01:33:06

标签: javascript

我是JavaScript对象的新手。我想创建一个像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>

5 个答案:

答案 0 :(得分:7)

这将创建一个名为Area的对象,上面有方法。

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

除非你想要Area可调用,否则不要使它成为一个函数。

答案 1 :(得分:6)

您要在此处执行的操作是使用您所描述的方法创建名为Area的对象。最简单,最干净的方法就是这样:

var Area = {

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

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

};

现在,您可以按照自己的描述使用Area.square()Area.rectangle()

答案 2 :(得分: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();

答案 3 :(得分:2)

好的,所以代码有很多答案,但很少解释:

通过使Area成为一个函数,你犯了第一个错误 - 它应该是一个附加函数的对象。

然后,在Area函数的正文中,您声明了更多函数,但由于它们位于Area函数内,它们只是立即被删除 - 外部实际上没有可调用的形式。 / p>

你想要的是制作一个物品:

var Area = {};

然后附加功能:

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

等等。

这样,您要调用的函数是Area对象的属性。

或者你可以内联:

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

答案 4 :(得分:0)

作为简单地为方法创建命名空间的替代方法(例如,var Area = { ... }),您可以向现有类添加静态方法,例如

function Area() { ... };

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