簡體   English   中英

關於頂級 function 的困惑

[英]Confusion regarding top-level function

我剛開始學習 JavaScript 和 Node. 由於來自 Python 背景,所以幾乎沒有什么尷尬的地方。 例如,要在 Express 中創建一個服務器,我們將使用:

const express = require("express");

const app = express();
...

它說的地方

/**
 * Creates an Express application. The express() function is a top-level function exported by the express module.
 */

我不明白為什么express()是 function。如果同樣的事情應該在 Python 中完成,它將像這樣完成:

from flask import Flask
app = Flask(__name__)

它說的地方

首先,我們導入了 Flask class。這個 class 的一個實例將是我們的 WSGI 應用程序。

接下來我們創建這個 class 的一個實例。FI ...

這是我對編程的一般理解。 大多數時候,我們從庫中導入一些 class 並生成一個 object,然后我們操縱它的方法。 在 javascript 中,我發現它與 function、構造函數 function 等混淆。構造函數 function 與 class 相同嗎?

當你導入express時,你得到的是一個工廠 function。一個工廠 function 是一個 function,當你調用它時,它會為你創建一個 object。 它類似於將new與構造函數一起使用,但工廠 function 不直接公開構造函數或直接公開 class。 它只是向您公開一個 function,當您調用它時,它會創建一個 object,然后您可以通過調用方法與之交互。

想象一下幕后:

class Express {
    constructor() {
        ...
    }
    get() {
        ...
    }
    post() {
        ...
    }
    use() {
        ...
    }
}

// factory function
function createExpressInstance() {
   let obj = new Express();
   // maybe do some other setup on the object
   return obj;
}

// define function that will be referenced as express.static()
createExpressInstance.static = function() {
   ...
}

// export the factory function
module.exports = createExpressInstance;

工廠 function 是可以創建新對象的 API 的一種設計模式。 它不是直接公開class定義或直接導出構造函數,而是“隱藏”實際實現。 您撥打 function 並得到 object。

某些特定情況下,工廠 function 是構建新 object 的首選方式(特別是在構建對象時可能涉及異步事物時),但在其他情況下(例如這種情況),它只是一種編寫方式的選擇代碼以及如何設計公共 API。

在Javascript中,構造函數function和class一樣嗎?

是和不是。 class 是整個定義,包括方法。 構造函數只是 class 定義的一種方法。

但是,您使用 class 的名稱調用構造函數。因此,如果(在我上面的示例中)執行了console.log(typeof Express) ,您將得到"function" ,因為符號Express代表構造函數 function。

暫無
暫無

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

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