为什么数学对象在javascript中不需要新关键字
Why Math Object does not need new keyword in javascript
我知道Math
是javascript中的一个Object,但在书中它说,当使用数学对象时,我们不需要使用新的关键字。例如,
var pi = Math.PI;
alert(pi);
我想知道为什么它不需要,而在其他Object中,比如Date
,它需要新的关键字。
typeof Math --> "object"
typeof Date --> "function"
Math是一个Object,Date是构造函数。
new
关键字用于使用构造函数而不是对象初始化实例。
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();
new关键字用于处理构造函数。Math是一个已经实例化的全局对象。
当您调用new Date([optional parameter])
时,您将创建Date
函数的一个新实例,该实例存储特定于该实例的数据(日期和时间)。Math
不需要存储任何特定于实例的数据,因为PI
不会更改,并且所有Math
函数,如sin
、cos
、max
等,它们总是做相同的事情。这就是Math
作为静态对象存在的原因(就像其他语言中的静态类一样)。不需要创建此对象的新实例,您可以在任何地方使用相同的实例。BTW Date
也有静态方法,比如Date.parse()
。使用此方法不需要创建新的Date
。你叫它就像你叫Math.cos(x)
一样,只是Date.parse('2014-11-04')
。
- 如何在不需要单击按钮的情况下获取选项的值
- Javascript不需要的关闭行为
- 如何在不知道关键字的情况下访问javascript对象值
- 删除客户端浏览器上不需要的内容
- 不允许在字段中输入不需要的字符
- 不需要的JSON响应
- 如何使图像适合TD,而不需要包装在不同的屏幕分辨率上
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器
- jQuery自动完成显示不需要的动态html标记
- 在Knockout js中创建一个包含多行的表,而不需要推送
- AngularJs正在解码HTML字符(不需要)
- jQuery regex从文本链接-添加不需要的域到链接
- 防止从浏览器到应用商店的不需要的重定向
- 外部解析RSS提要,不需要像谷歌和服务器端那样的任何库
- 不需要的异步事件调度
- 是否有任何不需要后端的验证码角度指令
- Ajax 请求给出不需要的响应
- Jquery/javascript:加载页面时不需要的重复函数
- 为什么Java代码需要编译,而JavaScript代码不需要
- 为什么数学对象在javascript中不需要新关键字