簡體   English   中英

函數構造函數對象與對象內部對象之間的javascript區別

[英]javascript difference between function constructor object and an object inside object

我正在嘗試理解/理解GraphQL模式講師已使用的內容。

所以首先他做了這樣的事情

const BookType = new GraphQLObjectType({  
    name: 'Book', 

    fields: () => ({
        id: { type: GraphQLString},
        name: { type: GraphQLString},
        genre: { type: GraphQLString }
    })
})

在這里,他提到原因字段必須是一個函數,是因為稍后當我們有多個類型並且它們相互引用時。 那么除非我們將其包裝在函數中,否則一種類型將不知道其他類型是什么(稍后再介紹)

之后,當他制作RootQuery時,他做了類似的事情

const RootQuery = new GraphQLObjectType({
    name: "RootQueryType",
    fields: {
        book: {
          type: BookType, 
          args: { id: { type: GraphQLString }},
          resolve(parent, args){
           args.id
            }
         }
      }
})

在這里,他做了fields: {而不是fields: () => ({為此,他給出了以下原因

我們不需要像上面的字段一樣包裝它,因為我們不必擔心根查詢中的訂單太多

[問題:]我無法理解他的解釋,所以我正在尋找某人向我解釋為什么他這樣做了fields: {而不是fields: () => ({這?

這可能是因為在RootQueryType中,該字段簿不包含任何對您的自定義聲明類型的引用,例如AuthorType。 因此,您的現場書僅取決於BookType或您可能已在頂部導入的任何其他GraphQLObjects。 現場作者也是如此。 其中不應包含BookType的任何引用。

但是,對於您的自定義類型(BookType或AuthorType),它們可能包含彼此的引用,因此它們彼此依賴。

因此,在定義這些自定義類型時,您的字段需要包裝在函數中。 但這並不是RootQuery的必要條件。

如果您想了解更多。 查找提升的概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM