JavaScript には、関数のようなものの「グループ」がいくつかあるようです。これが私が作った彼らの名前です:
「通常の関数」: これらは括弧と で呼び出すことができ
new
ます。ほとんどの関数はこのカテゴリに分類されます。「コンストラクター専用関数」: これらは only で呼び出すことができ
new
ます。たとえばImage
、DOMParser
、 などです。「非コンストラクター関数」: これらは括弧で呼び出すことができますが、
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
、ホスト オブジェクトのプロパティからのみアクセスできます。これらのほとんどは、「インターフェース」よりも「コンストラクター」と呼ぶほうが正確だと思います。
【ホストオブジェクト vs ネイティブオブジェクトについて】
これは一種の正しい軌道に乗っています。この質問(および受け入れられた回答とそのコメント) を考慮すると、ユーザー定義関数がホスト オブジェクトであるかネイティブ オブジェクトであるかについて、意見の相違や混乱があるようです。
それを避けるために、ユーザー定義関数を UDF と呼び、それらがホストかネイティブかを気にする必要はありません。つまり、UDF、ホスト オブジェクト、およびネイティブ オブジェクトがあります。
「通常機能」
すべての UDF
、など
Object
のネイティブ オブジェクト。String
のようなホスト オブジェクト
window.toString
(Chrome 18 でテスト済み)。
「コンストラクタ専用関数」
ネイティブ オブジェクトがありませんか?
DOMParser
、 などのホスト オブジェクトImage
。
「非コンストラクター関数」
Math.round
や などのネイティブ オブジェクトFunction.prototype
。のようなホスト オブジェクト
DOMParser#parseFromString
。
「呼び出せない関数」
ネイティブ オブジェクトがありませんか?
NodeList
、 などのホスト オブジェクトDocumentFragment
。
したがって、ホスト オブジェクトとコンストラクターのみ/呼び出し不可能な関数の間に接続があるように見えますが、ホストとネイティブは非コンストラクターおよび通常の関数には適用されないようです。