1. ホーム
  2. javascript

[解決済み] オブジェクトとクラスと関数

2023-01-24 04:08:02

質問

JavaScriptのオブジェクト、クラス、関数の違いは何でしょうか? クラスと関数はオブジェクトの一種であると考えるのは正しいでしょうか?

また、クラスと関数を区別するものは何ですか?それとも、これらは本当に同じもので、使用方法によって用語が変わるだけなのでしょうか?

function func() { alert('foo'); } // a function
func(); // call the function - alerts 'foo'
var func2 = function () { alert('hello'); } // acts the same way as 'func' surely?
func2(); // alerts 'hello'

var Class = function() { alert('bar'); }; // a class
var c = new Class(); // an istance of a class - alerts 'bar'

確かに、クラスはメソッドとプロパティを持ち、インスタンス化することができます - しかし、それならどんな古い関数でも同じことができます - そうではありませんか?

どのように解決するのでしょうか?

もうお気づきだと思いますが、JavaScriptにはクラスがありません。代わりに、JavaScript の関数は、関数呼び出しの前に new キーワードで関数呼び出しの前に記述することで、コンストラクタのように動作させることができます。これは コンストラクタ・パターン .

JavaScript では、プリミティブなデータ型(ブーリアン、数値、文字列)を除いて、すべてがオブジェクトです。 undefined . 一方 null は、最初はそうでないと思っても、実際にはオブジェクトの参照です。このため typeof null"object" .

JavaScriptの関数はLuaのfuncableと似ています(つまり呼び出し可能なオブジェクトです)。したがって、関数はオブジェクトの代わりに使用することができます。同様に、JavaScriptでは配列もオブジェクトです。一方、オブジェクトは連想配列と考えることができます。

しかし最も重要な点は、JavaScriptはプロトタイプのオブジェクト指向言語であるため、クラスが存在しないことです。これは、JavaScriptのオブジェクトは他のオブジェクトを直接継承することを意味します。ですから、クラスは必要ありません。必要なのは、オブジェクトを作成し、拡張する方法だけです。

JavaScriptのプロトタイプ継承についてもっと知るには、次のスレッドを読んでください。 プロトタイピング継承の利点は?