我知道Math
是javascript中的一个Object,不过在书中它说使用Math对象时,我们不需要使用new关键字。例如,
var pi = Math.PI;
alert(pi);
我想知道为什么它不需要,而在其他对象中,如Date
,它需要new关键字。
答案 0 :(得分:3)
Math
实际上是ECMAScript中隐式global
对象的属性的名称,它是一个普通的Javascript对象,类型为Math
(通过赋予它属性来定义)这个单一实例,类似于JSON的工作方式)。这在说明书中记录:http://www.ecma-international.org/ecma-262/5.1/#sec-15.8
Math
对象可以这样想:
// within the "global" context:
var Math = {
PI: 3.14,
sin: function(x) { ... },
cos: function(x) { ... }
};
请注意,没有定义构造函数(也没有定义Call
),因此表达式new Math()
没有意义且未定义。如果是,那么它看起来像这样:
function Math() {
this.PI = 3.14;
this.sin = function(x) { ... };
this.cos = function(x) { ... };
};
var Math = new Math();
答案 1 :(得分:3)
typeof Math --> "object"
typeof Date --> "function"
Math是一个Object,Date是构造函数。
new
关键字用于使用构造函数初始化实例而不使用对象。
答案 2 :(得分:1)
在处理构造函数时使用new关键字。 Math是一个已经实例化的全局对象。
答案 3 :(得分:0)
当您调用new Date([optional parameter])
时,您将创建Date
函数的新实例,该实例存储特定于此实例的数据(日期和时间)。 Math
不需要存储任何特定于实例的数据,因为PI
不会更改,所有Math
函数都会更改,例如sin
,cos
,{{1}等等,他们总是做同样的事情。这就是max
作为静态对象存在的原因(就像其他语言中的静态类一样)。无需创建此对象的新实例,您可以在任何地方使用相同的实例。 BTW Math
也有静态方法,例如Date
。您不需要创建新的Date.parse()
来使用此方法。您称之为Date
,只是Math.cos(x)
。