[解決済み] オブジェクトとクラスと関数
質問
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のプロトタイプ継承についてもっと知るには、次のスレッドを読んでください。 プロトタイピング継承の利点は?
関連
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プロトタイプ継承の利点は古典的なものよりも?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?