7

JavaScript には、関数のようなものの「グループ」がいくつかあるようです。これが私が作った彼らの名前です:

  • 「通常の関数」: これらは括弧と で呼び出すことができnewます。ほとんどの関数はこのカテゴリに分類されます。

  • 「コンストラクター専用関数」: これらは only で呼び出すことができnewます。たとえばImageDOMParser、 などです。

  • 「非コンストラクター関数」: これらは括弧で呼び出すことができますが、new. たとえば、Math.roundFunction.prototype.

  • 「呼び出し不可能な関数」: これらの関数はまったく呼び出し可能ではありません。たとえば、window.constructorDocumentNodeListなどです。

これらのさまざまな関数のグループの適切な名前は何ですか?


[[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

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

4

2 に答える 2

1

ここで取り上げているのは、EcmaScript に組み込まれているネイティブ オブジェクトと、開発者が作成および提供するホスト オブジェクトとの間のニュアンスだと思います。

「通常の関数」はホスト オブジェクトにマップされます。つまり、JS を使用して作成された関数と、「コンストラクターのみの関数」、「コンストラクター以外の関数」、および「呼び出し不可能な関数」は、下位レベルで言語に組み込まれたネイティブ オブジェクトにマップされます。 .

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

于 2012-05-07T21:10:17.243 に答える
0

あなたが求めているものの正式な命名法はないと思いますが、通常、これは人々がプログラミング言語でこれらすべての関数を呼び出す方法です。

  • 通常の機能:function
  • コンストラクタ:constructor
  • 非コンストラクター:method
  • 呼び出し不可: interface(JS の場合、これは下位レベルのネイティブ オブジェクトを指します)
于 2012-05-07T21:10:03.100 に答える