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。
したがって、ホスト オブジェクトとコンストラクターのみ/呼び出し不可能な関数の間に接続があるように見えますが、ホストとネイティブは非コンストラクターおよび通常の関数には適用されないようです。