为什么Math Object在javascript中不需要新的关键字

时间:2014-11-04 06:21:46

标签: javascript math

我知道Math是javascript中的一个Object,不过在书中它说使用Math对象时,我们不需要使用new关键字。例如,

var pi = Math.PI;
alert(pi);

我想知道为什么它不需要,而在其他对象中,如Date,它需要new关键字。

4 个答案:

答案 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函数都会更改,例如sincos,{{1}等等,他们总是做同样的事情。这就是max作为静态对象存在的原因(就像其他语言中的静态类一样)。无需创建此对象的新实例,您可以在任何地方使用相同的实例。 BTW Math也有静态方法,例如Date。您不需要创建新的Date.parse()来使用此方法。您称之为Date,只是Math.cos(x)