• ベストアンサー

クラスを定義したいのですが下記は同じ意味でしょうか

JavaScriptで、クラス(のようなもの)を定義したいのですが、 下記は同じ意味でしょうか? ・var Hoge = function() {}; ・function Hoge() {}; 上は、Hogeクラスを定義したことになるのでしょうか? それとも単に無名クラス(?)を、変数へ格納しただけ?

  • re97
  • お礼率80% (601/744)

質問者が選んだベストアンサー

  • ベストアンサー
  • rageman
  • ベストアンサー率12% (3/25)
回答No.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はのぞく) 出来るだけ関数名はつけた方がデバッグが簡単になります

re97
質問者

お礼

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

その他の回答 (2)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

>クラスを定義したことになるのでしょうか? あなたがそれをクラスのように使うのならクラスだし 今のままならただの空っぽの関数です それでもあなたが強く言い張ればクラスになるかもしれません 要はES5までのJSにクラス文はないので クラスとは完全に概念で、考え方、見方の問題であるということです 例えばあるオブジェクト達に共通のメンバを設定したければ ES6になりますが__proto__セッターに同じオブジェクトを与えるのでもできます その場合そのオブジェクトはただのオブジェクトですが コンストラクタを持たないクラスであると見れると思います

re97
質問者

お礼

回答ありがとうございました。 >あなたがそれをクラスのように使うのならクラスだし >今のままならただの空っぽの関数です >それでもあなたが強く言い張ればクラスになるかもしれません >要はES5までのJSにクラス文はないので >クラスとは完全に概念で、考え方、見方の問題であるということです 説明分かりやすかったですー

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

Javascriptにクラスという概念はありません。 >Hogeクラスを定義したことになるのでしょうか? なりません。関数リテラルをHogeに代入しただけです。 http://www.ajaxtower.jp/js/function/index5.html JavaScriptでクラスっぽい事をするならプロトタイプかな。 http://www.slideshare.net/yuka2py/javascript-23768378 まあ、何を実現したくてクラスを使うのかにもよりますけど。ゲームならEnchant.jsを導入すればよい話ですが。

re97
質問者

お礼

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

関連するQ&A

  • javascript 変数定義について

    javascript 変数定義について 下記のように変数を大量に定義しなければならないとき forなどを使って簡単に書くにはどのようにしたら良いでしょうか? よろしくお願いいたします。 var n1=1; var n2=1; ・ ・ ・ var n99=1; var n100=1;

    • ベストアンサー
    • HTML
  • function内での定義

    functionの中で変数に値を入れ、function外で使用したいのですがうまくできません。 例えば var ppc = null; function OpenDetail(){ ppc = "fggr"; } document.write("////"+ppc); という場合、出力は「////null」ですが期待している結果は「////fggr」です。 javascriptは上から順番に実行する、functionはどこかからあえて呼ばなくても実行される、ローカル変数を別の場所で使うにはグローバル変数の定義が必要、を踏まえてのソースなのですが、どこが間違っているのか教えてください。

  • function「文」と「演算子」の違い

    下記は、リンク先の分類でいくと、 「function 文」「function 演算子」 何れに該当するのでしょうか? var hoge = function f() { alert(1); }; hoge(); https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope ・無名関数でないから、「function 文」? ・あるいは、「var hoge = 」に入れているから、「function 演算子」? ・もしくは、「function 文」でもあり、「function 演算子」でもある? >同じ構文を持っています ・と書いているから、そもそも両者に違いはない?

  • javascriptのクラスの処理について

    javascriptのクラスを利用した処理で分からない所がありますので 教えて下さい。 最初に 下記の「1.の方法」でhtml側にjavascriptを呼び出す記述を して動かしていましたが、「2.の方法」に変更しなければならなく なりました。 ところが、「2.の方法」でやりますと、メインのhtml側がフリーズ してしまいます。 調べてみますと、メモリーを食いつぶしていますので、何か永久ループの ような状態に陥っているようです。 こような場合、何かやり方がおかしいのでしょうか? ご存知の方がいらっしゃいましたら、ご教授お願いいたします。 === 1.の方法 ===(問題なく動きます)================= ---ソース(index1.html) <script type="text/javascript" src="js1.js"></script> <script type="text/javascript"> hoge.create( abc, "def"); </script> ---ソース(js1.js) var hoge = {   xxx: ~~,   yyy: ~~   create: function(val1,val2) {     ~略~ }; === 2.の方法 ===(フリーズしてしまいます)=========== ---ソース(index2.html) <script type="text/javascript" src="js2.js"></script> <script type="text/javascript"> hoge_sub(); </script> ---ソース(js2.js) function hoge_sub(){   hoge.create( abc, "def"); } var hoge = {   xxx: ~~,   yyy: ~~   create: function(val1,val2) {     ~略~ };

  • クラス、メソッド、プロパティ、変数などの意味は?

    いろんなサイトやネットでいろいろ調べたのですが、 よく分かりませんでした。自分なりに考えたことですが、 (1)~(6)の用語の内容とコード上での色付けは正しいでしょうか? (1)クラス(緑枠) コンストラクタ、メソッド、プロパティを一括りにまとめたパッケージのこと。 つまり、functionの【{】と【}】の間にあるもの。 (2)オブジェクト(青枠) 関数。すなわち「複数の物や動作を入れる物」。 つまりfunctionで始まるものをオブジェクトと呼ぶ。 (3)コンストラクタ(= クラス名または関数名)(紫枠) 「構築子」のこと。オブジェクトを作る名前の部分。 つまりfunction直後に付ける関数名(クラス名)をコンストラクタと呼ぶ。 (4)プロパティ(赤枠) 「特徴」のこと。 つまりfunction内で指定された変数(var b)をプロパティと呼ぶ。 function a(){var b;}; (5)メソッド(水色枠) 「動作」のこと。 つまりオブジェクト(functionで始まるもの)が 変数(var b)に指定された場合はメソッドと呼ぶ。 var b = function a(){}; (6)変数(灰色枠) function外で指定された変数(var b)は、変数と呼ぶ。 function a(){}; var b;

  • javascript無名関数から変数にアクセス

    お世話になります。 javascript初心者です。 無名関数からグローバル変数にアクセスしたいのですが 外で変数を宣言して、内でvar無しで代入してみたのですがうまくいきません どのようにすれば期待する結果になるのか、お忙しい中恐縮ですが 詳しい方お教えいただけないでしょうか //グローバル変数 var hoge; //dataTransfer処理省略 //html5のFileReader var reader = new FileReader(); reader.readAsDataURL(file); //ロードが完了したら無名関数にてhogeに結果を代入 reader.onloadend = function(e) {  hoge = e.target.result; }; alert(hoge); ■期待する結果 アラートで「結果」が表示される ■実際の結果 アラートで「」(空白)が表示される 無名関数内でalert(e.target.result);するとちゃんと結果が表示されるので FileReaderの処理は成功している模様です。 無名関数からグローバル変数にアクセスする方法を御存知の方 お教えいただけたら幸いです

  • 無名内部クラスと匿名内部クラスと匿名クラスの違い

    ■外部クラス ・外部クラスの定義を教えてください ・内部クラスに対して外部クラスと言うのであれば、「クラス内に宣言されたクラスがないクラス(普通のクラス?)」は外部クラスとは言わないのでしょうか? ■無名クラス ・無名クラスは必ず内部クラスなのでしょうか? ■同じ意味? 下記は同じ意味でしょうか? ・無名内部クラス ・匿名クラス ・無名クラス ・匿名内部クラス

    • ベストアンサー
    • Java
  • getElementByIdを使用したグローバル変数の定義(使い方について) 

    グローバル変数の定義について教えてください。 getElementByIdを、グローバル変数で使用することはできないのでしょうか? 【グローバル変数(整数)】の場合 ------------------------------------------------- //グローバルで整数を定義 var a = 10; function test(){ alert(a.value); } 結果:「10」が表示される。 ------------------------------------------------- 【グローバル変数(getElementByIdを使用)の場合】 ------------------------------------------------- //グローバルでgetElementByIdで取得したオブジェクトを定義 var a = document.getElementById("objname"); function test(){ alert(a.value); } 結果:「null」 が表示される。 ※a = document.getElementById("objname"); でも同様。 ------------------------------------------------- 【ローカル変数(getElementByIdを使用)の場合】 ------------------------------------------------- function test(){ //ローカルでgetElementByIdで取得したオブジェクトを定義 var a = document.getElementById("objname"); alert(a.value); } 結果:「画面入力値」 が表示される。 ------------------------------------------------- このように getElementByIdで取得したオブジェクトを、 グローバル変数として扱った場合、nullとなるので困っています。 getElementByIdで取得したオブジェクトを、 グローバル変数として扱う良い方法はないでしょうか? 【環境】 OS:WindowsXP Pro 使用JavaScript:外部ファイルのjavaScript

  • (hoge)("fuge"); はどういう意味を持つのでしょうか?

    匿名関数を理解するために、下記ブログを参考にしました。 匿名関数と (function(){ ... })(); について : JavaScript 備忘録 http://blog.livedoor.jp/jsmemo/archives/767707.html 簡潔なコードで完全ではありませんが、理解できました。 ただ、下記コードだけは理解できませんでした。 ------- var hoge = function(str){ alert(str); }; (hoge)("fuge"); ------- ("fuge") でfunctionに引数を渡しているようですが、(hoge) の意味がわかりません。 同じような情報で下記ブログを読むと、 匿名関数の定義と実行 - 昼間のメモ http://blog.goo.ne.jp/hiuchida/e/431b5beb4adeb313a49b35c055f02df3 「C言語の関数へのポインタを使った関数呼出しを知っていれば同じだと分かるでしょう。」とありますが、 C言語に触ったことのない私には見当が付きませんでした。 「JavaScript ポインタ」でGoogle検索すると、マウスポインタに関する情報ばかりがHITしてしまいます。 何かヒントとなる情報はありませんでしょうか?

  • php クラス

    クラスの勉強をしているのですが、 記憶寿命をfunctionの中で完結させsample2以降でも同じ変数などを使えるようにするため定義済み関数内でクラスを処理したいのですが下記のエラーが出てしまいます。 functionの中でクラスを簡潔させるにはどのようにすればよいでしょうか?また、これはなぜエラーが起きているのでしょうか? function sample1(){ $pr=new parson; $pr->name="鈴木"; $pr->age=56; print $pr->getname(); print $pr->getage(); class parson { public $name="鈴木"; public $age=56; function getname(){return $this->name;} function getage(){return $this->age;} }} sample1(); Fatal error: Uncaught Error: Class 'parson' not found in hoge/class.php:11 Stack trace: #0 /hoge/class.php(27): sample1() #1 {main} thrown in /hoge/class.php on line 11

    • ベストアンサー
    • PHP

専門家に質問してみよう