JavaScript对象-调用而不创建它(如Math对象)

JavaScript对象-调用而不创建它(如Math对象),javascript,Javascript,我不熟悉JavaScript对象。我想创建一个类似JavaScript数学对象的对象。但它不起作用(它什么也不返回) 我想创建一个名为Area的对象,并为其提供方法square和rectangle。我想用和数学对象一样的方法来使用它。要找到正方形的面积,我将执行以下操作: var squareArea = Area.square(10); // 100 我选择区域作为示例,因为它很简单 我的脚本如下: <script> window.onload = function() {

我不熟悉JavaScript对象。我想创建一个类似JavaScript数学对象的对象。但它不起作用(它什么也不返回)

我想创建一个名为Area的对象,并为其提供方法square和rectangle。我想用和数学对象一样的方法来使用它。要找到正方形的面积,我将执行以下操作:

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>

window.onload=函数(){
功能区(){
功能广场(a){
面积=a*a;
返回区;
}
函数矩形(a,b){
面积=a*b;
返回区;
}
}
矩形面积=面积。矩形(10,20);
警报(矩形区域);
}

这将创建一个名为
区域
的对象,其中包含方法

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

除非您希望
Area
可调用,否则不要将其设置为函数。

此处要做的是使用指定给它的方法创建一个名为
Area
的对象。最简单、最干净的方法是:

var Area = {

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

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

};

您现在可以使用所述的
Area.square()
Area.rectangle()

您的函数仅在包含函数
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
作为一个函数。您不需要这样做,因为您不需要多个
区域
实例,但如果需要,请执行以下操作:

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();

好的,有很多关于代码的答案,但很少有解释:

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

然后,在
区域
函数的主体中声明了更多的函数,但是由于它们位于
区域
函数内部,因此它们会立即被删除—实际上外部没有可调用的表单

您想要的是制作一个对象:

var Area = {};
然后将函数附加到它:

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

这样,您要调用的函数就是
区域
对象的属性

或者,您可以在线执行此操作:

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

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

function Area() { ... };

Area.square = function(a) {
    return a * a;
};
了解有关对象的详细信息:。