6

我是 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>
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()和。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 回答