JavaScript的对象文字和在控制台记录时似乎被命名的对象之间有什么区别?

时间:2017-09-14 16:28:17

标签: javascript json

我注意到有时候我在console.log中找到一个对象,我得到了对象文字,有时似乎 console.logged 的前缀是一个名字。

例如,如果我在将对象发送到服务器之前对其进行控制,我得到:

{id: 18, date: "2017-09-13T21:59:59.999Z"...etc}

但当我通过服务器调用控制同一个日志作为承诺返回时,我得到:

Resource {id: 18, date: "2017-09-13T21:59:59.999Z"...etc}

导致这种差异的原因是什么?什么似乎是一个对象的两个不同表示之间有什么区别?

3 个答案:

答案 0 :(得分:1)

他们有一个constructor属性,不指向Object,但在这种情况下指向Ressource

答案 1 :(得分:1)

控制台正在给你提示,它并不总是按原样记录。

例如:

var Cat = function (name) {
    this.name = name;
}

var paws = new Cat('paws');
console.log(paws);
在您的示例中,

的行为类似于Resource。控制台正在暗示constructor

答案 2 :(得分:1)

后者是命名类的实例:

class Resource {
   constructor() {
      this.id = ...;
      this.date = ...;
   }
}

或命名构造函数:

function Resource() {
  this.id = ...;
  this.date = ...;
}

在这两种情况下,使用new关键字实例化的类或构造函数,但class是较新的ES6语法。

console.log(new Resource())

你的第一个例子只是一个没有构造函数的普通对象。