首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript为c++程序员解释

javascript为c++程序员解释
EN

Stack Overflow用户
提问于 2020-07-15 13:14:12
回答 1查看 94关注 0票数 1

背景

我很难从JSON创建一个带有ms时间戳的函数,并将其转换为人类可读的格式。我尝试了alert(Date(jsonData.timestamp).toISOString()),这导致了“Date(.).toISOString不是函数”。

但是,在我已经查找过的时间形成示例中,它起了作用,很快我就注意到要使用的模式是let myDate=new Date(...); alert(myDate.toISOString())。我试着得到了一个无效日期。因此,出于某种原因,Date()new Date()对这些参数的解释有所不同。

我想,当我用两个不同的日期结束时,也许从JSON得到的值(也就是字符串)应该作为一个数字传入:

代码语言:javascript
复制
new Date(1594720804236643));    // result differs from thjsut calling Date, without new
new Date("1594720804236643")); //does not work

我认为这种粗暴的复制结构会起作用,最终结果是:

代码语言:javascript
复制
let myDate=Date(jsonData.timestamp);
let myDateObject=new Date(myDate);
alert(myDateObject.toISOString());

虽然我有一个(可怕的,丑陋的)解决方案,但我想了解new的细微差别。

实际问题

MyClass()new MyClass()之间的区别在哪里,C++编程背景表明,无论对象是在堆栈还是堆上分配,区别都是唯一的。在Javascript中,规则显然是不同的。一方面,对参数的解释会发生变化,另一方面,结果对象上可用的函数集是不同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 12:27:18

下面是构造函数的一种常见模式,由于其自身的设计原因,不管是否在new中调用,它都希望以相同的方式运行:

代码语言:javascript
复制
function NewIsOptional() {
  if (this == null || !(this instanceof NewIsOptional))
    return new NewIsOptional();
  // normal constructor work
}

这个技巧可以通过检查this来实现。如果没有绑定(就像new丢失的情况一样),或者绑定到错误类型的东西,代码将通过new进行递归调用。通过构造函数传递的代码将看到this正确地绑定到一个新对象,因此它将继续执行它的正常操作。

现在,并不是所有的构造函数都这样做。我不确定我写过一个,而且我输入了很多代码。如果没有通过new调用一些构造函数,则会抛出异常。有些,例如符号“构造函数”,如果使用new调用异常,则抛出异常。有些构造函数(如日期或布尔函数)在没有使用new调用时会执行完全不同的操作。

基本上没有规则。构造函数是一个函数,构造函数中的代码可以做它想做的任何事情。它可以键入、检查参数值并决定不同的行为或决定抛出错误。它可以调用其他函数,如果它是在一个函数中创建的,就可以操纵它的闭包,当然,它可以做一些普通的事情,比如初始化对象属性(这是最常见的事情)。

另外,请注意,一个特定的构造函数如何解释它的参数,以及它在通过new调用或不调用它时的行为,是两个完全正交的事情。这方面也没有任何规则。构造函数可以使用或不使用new完全相同地解释参数,也可以完全不同地解释它们。所有这些都没有基本的语言规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62915735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档