[英]Terminology for different types of functions
在JavaScript中似乎有幾個不同的“組”類似函數的東西。 以下是我的名字:
“常規函數”:這些函數可以使用parens和new
來調用。 大多數功能都屬於這一類。
“僅構造函數”:這些函數只能使用new
來調用。 例如, Image
, DOMParser
等。
“非構造函數”:這些函數可以用parens調用,但不能用new
調用。 例如, Math.round
, Function.prototype
。
“不可調用函數”:這些函數根本不可調用。 例如, window.constructor
, Document
, NodeList
等。
這些不同功能組的專有名稱是什么?
我還試圖弄清楚函數所在的“組”是否可以根據其[[Prototype]]
( __proto__
)屬性是否設置為Function.prototype
。
大多數“常規函數”都有Function.prototype
,但可以使用非標准__proto__
刪除它。
大多數“僅構造函數的函數”都有Object.prototype
。 我找不到任何具有Function.prototype
(因此,沒有call
或apply
)。 這總是情況/規格行為嗎?
“非構造函數”似乎主要具有Function.prototype
,但Function.prototype
本身除外。 還有其他具有Object.prototype
嗎?
“不可調用的函數”似乎總是具有Object.prototype
。 是這樣的嗎?
我會在這里回答一些答案:
常規功能:
function
構造函數:constructor
非構造函數:method
不可調用:interface
這不是我真正想要的。 “函數”和“構造函數”當然是正確的,但我正在尋找更具體的東西(“非構造函數”等)。
“辦法”並不比“功能”在告訴你它不能被稱為更好的new
,和constructor
不抓住了關鍵,它只能被稱為new
。
在許多情況下,只能從宿主對象的constructor
屬性訪問不可調用的函數。 我認為大多數這些更准確地稱為“構造函數”而不是“接口”。
[關於主機對象與本機對象的東西]
這有點走上正軌。 考慮到這個問題 (以及接受的答案及其評論),似乎對用戶定義的函數是主機還是本機對象存在一些分歧或混淆。
為了避免這種情況,我們只需調用用戶定義的函數UDF,而不用擔心它們是主機還是本機。 所以我們有UDF,宿主對象和本機對象。
“常規功能”
每個UDF
本地對象,如Object
, String
等。
主機對象如window.toString
(在Chrome 18中測試)。
“僅構造函數”
沒有原生物體?
主機對象,如DOMParser
, Image
。
“非構造函數”
像Math.round
和Function.prototype
這樣的本機對象。
主機對象如DOMParser#parseFromString
。
“不可調用的函數”
沒有原生物體?
主機對象如NodeList
, DocumentFragment
。
因此看起來主機對象和僅構造函數/不可調用函數之間可能存在連接,但主機與本機似乎不適用於非構造函數和常規函數。
我認為你在這里所看到的是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.