为什么我们可以't在没有新运算符的情况下调用Date()类的方法
Why we can't call methods of Date() class without new operator
假设我定义了一个类似的变量
var today = Date();
console.log(today.getMonth()); // Throw Error
而其他类(如Error类(则在没有新运算符的情况下调用它们的方法。
function factorial(x) {
if(x <= 1)
throw Error("x must not be negative");
return x*factorial(x-1);
}
包装器对象(数字、布尔值、字符串(也可以在没有新运算符的情况下调用它们的方法。那么,这是唯一一个在调用它们的方法之前需要新运算符或任何对象创建技术的类吗。
Edit:As Date((是一种字符串类型,因此应该在不创建对象的情况下调用它们的方法。因为字符串类型的行为就像它们是对象一样。为什么不呢?
编辑2:我认为这是唯一一个不能像其他函数(Array(), String(), Error()
等(一样与new Date()
相同的核心函数。因此,这也是这种语言或ECMAScript错误的隐藏特征。
ECMAScript语言规范
根据ECMAScript规范(Javascript的基础(:
当Date作为函数而不是构造函数被调用时,它返回表示当前时间(UTC(的字符串。
注意函数调用Date(…(与对象不等价具有相同参数的创建表达式new Date(…(
参考:http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2
调用构造函数与调用函数
您需要new
,因为您正在创建一个新的Date
对象。简单地调用Date((意味着调用一个函数,该函数将Date((作为字符串返回。
请参阅:http://www.javascripture.com/Date
Date() : String
Returns a string representation of the current date and time.
在其他类型(如Array或Error(的情况下,函数是创建新对象并返回它们的工厂函数。
参见:
- http://www.javascripture.com/Error
http://www.javascripture.com/Array
错误(消息:字符串(:错误使用描述错误的指定消息创建新的错误。
新错误(消息:字符串(:错误与错误(消息(相同
无论是否使用new
调用JavaScript构造函数,其行为都是完全有效的。这就是Date
函数的情况,当在没有new
的情况下调用时,它将日期作为字符串返回,而当使用new
时,它则将日期作为成熟对象返回。
使用new的目的是创建一个继承自Date原型的实例。
这使得对象可能成为Date函数的接收器。
当你使用Date()
(在我看来这是一个无用的函数(时,你实际上得到了一个相当于(new Date()).toString()
的字符串。当然,这个对象只有字符串函数,而不是Date函数。
- 如何在不传递此信息的情况下查找被调用的元素
- 如何解决这种情况下的非法调用类型错误
- 是否可以在不更改上下文的情况下调用函数.apply
- Ajax:只在元素存在的情况下调用Ajax
- 如果满足某些条件,如何在不调用模态的情况下首先调用类
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- setTimeout()在忽略间隔的情况下重复调用函数
- 如何在不使用multipleparent()调用的情况下找到(元素表的)第一个祖先
- 如何在不每秒调用太多次的情况下通过Soundcloud解析api进行循环
- 在这种情况下,调用阻止默认值
- 如何在没有JQuery的情况下,通过对服务器的基本ajax调用,根据浏览器上的用户活动保持服务器会话活动
- 如何在没有空回调的情况下测试多个调用
- ReactJs:this.setState的情况下不调用回调函数
- 未捕获错误:在未加载模板编译器的情况下,无法调用“compile”.请在调用“compile”之前加载“ember te
- typeaheadjs:如何在不使用缓存数据的情况下调用服务器
- nodejs或expressjs在没有返回响应的情况下重复调用路由
- Ajax-函数在没有调用或单击的情况下启动
- JavaScript,在这种特殊情况下立即调用函数
- 如何在没有 AJAX 的情况下调用上一页
- 是否可以在不加对象名称前缀的情况下调用对象的函数