对象文字之前的标识符

时间:2018-04-11 07:41:29

标签: javascript node.js

检查node.js googleapis 库的结构,我看到以下内容:

> const google = require("googleapis")
> google
{ GoogleApis: [Function: GoogleApis],
  google:
   GoogleApis { 
     _discovery: Discovery { transporter: DefaultTransporter {}, options: [Object] },
     auth:
      AuthPlus {
        checkIsGCE: undefined,
        jsonContent: null,
        cachedCredential: null,
        _cachedProjectId: null,
        keyFilename: undefined,
        scopes: undefined,
        JWT: [Function: JWT],
        Compute: [Object],
        OAuth2: [Object] },
     _options: {} } }

我不明白直接放在对象文字之前的标识符的含义。例如,“GoogleApis”,“Discovery”或“AuthPlus”。

显然,它们不是对象键:

> Object.keys(google)
[ 'GoogleApis', 'google' ]
> Object.keys(google.google)
[ '_discovery', 'auth', '_options' ]

它们恰好出现在对象文字之前:

> Object.entries(google.google)
[ [ '_discovery',
    Discovery { transporter: DefaultTransporter {}, options: [Object] } ],
  [ 'auth',
    AuthPlus {
      checkIsGCE: undefined,
      jsonContent: null,
      cachedCredential: null,
      _cachedProjectId: null,
      keyFilename: undefined,
      scopes: undefined,
      JWT: [Function: JWT],
      Compute: [Object],
      OAuth2: [Object] } ],
  [ '_options', {} ] ]

出现在对象文字之前的标识符的含义是什么?例如:

"key": something {x:1, y:2, z:3}

(即我上一个例子中的“某事”)

谢谢!

3 个答案:

答案 0 :(得分:1)

这意味着该对象是您正在查看其名称的类的实例化。尝试在您的节点中运行它:

class mySpecialClass {
  constructor() {
    this.myProp = 1;
  }
}
const myInstant = new mySpecialClass();
  
    

myInstant

  
     

mySpecialClass {myProp:1}

答案 1 :(得分:0)

这是"类"你的对象。

答案 2 :(得分:0)

这些是类型。正如@Quentin评论的那样,你所看到的实际上并不是JavaScript或JSON源代码,而是一个非常适合人类消费的对象。如果类型信息可用于层次结构中的对象,则浏览器控制台和节点REPL将以您看到的格式提供此信息。

你可以很容易地看到这一点。创建一个类(或者你喜欢的构造函数),然后创建一个包含该类实例的对象:

> class MyClass { constructor () {this.num = 23; } }
[Function: MyClass]
> const obj = { instance: new MyClass () }
undefined
> obj
{ instance: MyClass { num: 23 } }

如您所见,REPL的输出告诉您属性instanceMyClass的实例。