我是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>
答案 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;
};