为什么 JavaScript 中的“Date”实例需要“new”关键字?
我了解行为的差异。 Date()
返回一个表示当前日期的字符串,new Date()
返回一个 Date 对象的实例,我可以调用该对象的方法。
但我不知道为什么。 JavaScript 是原型化的,因此 Date
是一个函数和一个对象,该对象具有也是对象的成员函数(方法)。但我还没有编写或读过任何具有这种行为方式的 JavaScript,我想了解其中的区别。
有人可以向我展示一些函数的示例代码,该函数具有一个方法,使用 new 运算符返回一个实例,并在直接调用时输出一个字符串吗?即这样的事情是怎么发生的?
Date(); // returns "Fri Aug 27 2010 12:45:39 GMT-0700 (PDT)"
new Date(); // returns Object
new Date().getFullYear(); // returns 2010
Date().getFullYear(); // throws exception!
非常具体的要求,我知道。我希望这是一件好事。 :)
I understand the difference in behavior. Date()
returns a String representing the current date, and new Date()
returns an instance of the Date object whose methods I can call.
But I don't know why. JavaScript is prototyped, so Date
is a function and an object which has member functions (methods) which are also objects. But I haven't written or read any JavaScript that behaves this way, and I'd like to understand the difference.
Can somebody show me some sample code of a function that has a method, returns an instance with the new operator, and outputs a String when called directly? i.e. how does something like this happen?
Date(); // returns "Fri Aug 27 2010 12:45:39 GMT-0700 (PDT)"
new Date(); // returns Object
new Date().getFullYear(); // returns 2010
Date().getFullYear(); // throws exception!
Very specific request, I know. I hope that's a good thing. :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其中大部分可以自己完成。根据 ECMA 规范,调用不带
new
的裸构造函数并获取字符串对于Date
是特殊的,但您可以为此模拟类似的操作。这就是你应该如何做的。首先在构造函数模式中声明一个对象(例如,要使用
new
调用的函数,并返回其this
引用:Thing 的新实例可以具有
instanceMethod()
调用它们。现在只需在 Thing 本身上添加一个“静态”函数:现在您可以执行以下操作:
Most of this is possible to do yourself. Calling the bare constructor without
new
and getting a string is special forDate
per the ECMA spec, but you can simulate something similar for that.Here's how you'd do it. First declare an object in the constructor pattern (e.g. a function that is intended to be called with
new
and which returns itsthis
reference:New instances of Thing can have
instanceMethod()
called on them. Now just add a "static" function onto Thing itself:Now you can do this:
new
是 Javascript(和其他语言)中的关键字,用于创建对象的新实例。可能与 JavaScript 中的“new”关键字是什么? 重复。
另请参阅这篇文章:http://trephine.org/t/index.php?title =Understanding_the_JavaScript_new_keyword
new
is a keyword in Javascript (and others) to create a new instance of an object.Possibly duplicate of What is the 'new' keyword in JavaScript?.
See also this article: http://trephine.org/t/index.php?title=Understanding_the_JavaScript_new_keyword