重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

JavaScriptで、クラス(のようなもの)を定義したいのですが、
下記は同じ意味でしょうか?

・var Hoge = function() {};
・function Hoge() {};

上は、Hogeクラスを定義したことになるのでしょうか?
それとも単に無名クラス(?)を、変数へ格納しただけ?

A 回答 (3件)

javascriptではクラス(のようなもの)はプロトタイプを使用します


おそらくjavascriptでオブジェクト指向を学習する人にとっては
最初はなんのことだか訳が分からないと思います

プロトタイプは簡単にいうと関数の中でthisという変数を使用する際に
関数のprototypeのメンバに設定した値や関数を使用出来るって言うだけです
それ以外に普通の関数のように振る舞います。
これだけでオブジェクト指向っぽい事をクラスを使用しないで実現可能にしています
このthisの指しているオブジェクトを把握する事がjavascriptでオブジェクト指向を理解するのが
一番の近道です。

ただクラスとかインスタンスとかの名称がオブジェクト指向で一般化しているので
整理する際には、プロトタイプ=クラス、プロトタイプをnewしたもの=インスタンスとして
普通に会話していても通じる場合が多いと思います。
javascriptの場合のnewは、thisの参照先を新しく作成して使用する意味のnewです

さて

質問の同じ意味になるかというと、無名関数であることをのぞけばほぼ同じなのですが
通常は var Hoge = function Hoge () {}; と記述する方が混乱はないと思います
またこのときに、var h = new Hoge()とインスタンス(みたいなもの)を作成した際に
h.constructor.nameでHogeの名称(クラス名みたいなもの)が確認出来るようになるので(おそらくIEはのぞく)
出来るだけ関数名はつけた方がデバッグが簡単になります
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
参考になりましたー

お礼日時:2013/08/01 21:30

>クラスを定義したことになるのでしょうか?



あなたがそれをクラスのように使うのならクラスだし
今のままならただの空っぽの関数です
それでもあなたが強く言い張ればクラスになるかもしれません

要はES5までのJSにクラス文はないので
クラスとは完全に概念で、考え方、見方の問題であるということです

例えばあるオブジェクト達に共通のメンバを設定したければ
ES6になりますが__proto__セッターに同じオブジェクトを与えるのでもできます

その場合そのオブジェクトはただのオブジェクトですが
コンストラクタを持たないクラスであると見れると思います
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>あなたがそれをクラスのように使うのならクラスだし
>今のままならただの空っぽの関数です
>それでもあなたが強く言い張ればクラスになるかもしれません

>要はES5までのJSにクラス文はないので
>クラスとは完全に概念で、考え方、見方の問題であるということです

説明分かりやすかったですー

お礼日時:2013/08/01 21:31

Javascriptにクラスという概念はありません。



>Hogeクラスを定義したことになるのでしょうか?
なりません。関数リテラルをHogeに代入しただけです。
http://www.ajaxtower.jp/js/function/index5.html

JavaScriptでクラスっぽい事をするならプロトタイプかな。
http://www.slideshare.net/yuka2py/javascript-237 …

まあ、何を実現したくてクラスを使うのかにもよりますけど。ゲームならEnchant.jsを導入すればよい話ですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/08/01 21:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!