ほとんどの著者は、javascript では「関数は第一級市民である」と言っています。これらは、クラスに関連付けられた単なるメソッドであるという点で、C# のファースト クラスではありません。メソッド デリゲート (およびラムダ) は、ファースト クラス シチズンのようなメソッドを作成するための特定のクラスです。
Crockford の "Javascript: The Good Parts" や、Skeet や誰かのような著書に戻って読むように言わずに、私が説明できる限りのことを以下に示します。
Javascript は、C# よりもパーツがはるかに少ないです。C# で直接できることと、Javascript でできる (またはできない) こと (およびその逆) を比較しないでください。
では、すべての言語 (または少なくとも C#) に「ファースト クラス関数」がないのはなぜでしょうか? 通常、答えは最も単純です。それは、言語設計の要件ではなかったからです。しかし、明らかに彼らは今それを追加したので、それは私の側では一種の警官です. しかし、誰もあなたの将来の言語にそれを含めるように言わなかったとしたら、あなたはそうしますか?
したがって、覚えておくべき重要なことは、C# では関数 (メソッド) をクラスに関連付ける必要があるということです。Javascript ではそうではありません。その理由は言語定義 (仕様) にあります。
また、オブジェクトの作成に関する声明でこれをフォローアップする必要があります。
次の 2 つの方法のいずれかで、JavaScript で新しいオブジェクトを作成できます。
//using object syntax
var ob1 = { name: value, nestedFunction: function(){} };
また
//using a function
function MyFunc(){
var name = value;
function nestedFunction(){}
}
var ob2 = new MyFunc();
2 番目のケースでは、関数を使用してオブジェクトを宣言しています。最初のケースでは、リテラル構文を使用して宣言しています。
C# で同じことを行うには、新しいオブジェクトをクラスとして作成する必要があります。
MyClass ob1 = new MyClass(); //constructor is a member function of the class
public class MyClass {
public MyClass() {
}
public void nestedFunction(){
}
}
Javascript では、返されるメソッドを定義する必要があったことに注意してください。
わかりました、今夜はこれで十分だと思います。