簡體   English   中英

不同類型功能的術語

[英]Terminology for different types of functions

在JavaScript中似乎有幾個不同的“組”類似函數的東西。 以下是我的名字:

  • “常規函數”:這些函數可以使用parens和new來調用。 大多數功能都屬於這一類。

  • “僅構造函數”:這些函數只能使用new來調用。 例如, ImageDOMParser等。

  • “非構造函數”:這些函數可以用parens調用,但不能用new調用。 例如, Math.roundFunction.prototype

  • “不可調用函數”:這些函數根本不可調用。 例如, window.constructorDocumentNodeList等。

這些不同功能組的專有名稱是什么?


我還試圖弄清楚函數所在的“組”是否可以根據其[[Prototype]]__proto__ )屬性是否設置為Function.prototype

  • 大多數“常規函數”都有Function.prototype ,但可以使用非標准__proto__刪除它。

  • 大多數“僅構造函數的函數”都有Object.prototype 我找不到任何具有Function.prototype (因此,沒有callapply )。 這總是情況/規格行為嗎?

  • “非構造函數”似乎主要具有Function.prototype ,但Function.prototype本身除外。 還有其他具有Object.prototype嗎?

  • “不可調用的函數”似乎總是具有Object.prototype 是這樣的嗎?


我會在這里回答一些答案:

常規功能: function
構造函數: constructor
非構造函數: method
不可調用: interface

這不是我真正想要的。 “函數”和“構造函數”當然是正確的,但我正在尋找更具體的東西(“非構造函數”等)。

“辦法”並不比“功能”在告訴你它不能被稱為更好的new ,和constructor不抓住了關鍵,它只能被稱為new

在許多情況下,只能從宿主對象的constructor屬性訪問不可調用的函數。 我認為大多數這些更准確地稱為“構造函數”而不是“接口”。


[關於主機對象與本機對象的東西]

這有點走上正軌。 考慮到這個問題 (以及接受的答案及其評論),似乎對用戶定義的函數是主機還是本機對象存在一些分歧或混淆。

為了避免這種情況,我們只需調用用戶定義的函數UDF,而不用擔心它們是主機還是本機。 所以我們有UDF,宿主對象和本機對象。

  • “常規功能”

    • 每個UDF

    • 本地對象,如ObjectString等。

    • 主機對象如window.toString (在Chrome 18中測試)。

  • “僅構造函數”

    • 沒有原生物體?

    • 主機對象,如DOMParserImage

  • “非構造函數”

    • Math.roundFunction.prototype這樣的本機對象。

    • 主機對象如DOMParser#parseFromString

  • “不可調用的函數”

    • 沒有原生物體?

    • 主機對象如NodeListDocumentFragment

因此看起來主機對象和僅構造函數/不可調用函數之間可能存在連接,但主機與本機似乎不適用於非構造函數和常規函數。

我認為你在這里所看到的是EcmaScript內置的本機對象與主機對象之間的細微差別,這些對象是開發人員創建和提供的對象。

“常規函數”映射到主機對象,也就是說使用JS和“僅構造函數”創建的函數,非構造函數“和”不可調用函數“映射到較低級別的語言中內置的本機對象。

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

我認為沒有正式命名你所要求的,但通常這是人們用任何編程語言調用所有這些函數的方式:

  • 常規功能: function
  • 構造函數: constructor
  • 非構造函數: method
  • 不可調用: interface (在JS的情況下,這指的是較低級別的本機對象)

暫無
暫無

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

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