質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3576閲覧

コンストラクタはなぜ必要か?

twin_bird

総合スコア230

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/05/14 10:13

表題の通りです。
コンストラクタはなぜ必要なのかということが今ひとつ理解しきれていないので、明確の回答を募集したいです。

// 引数を初期化しない function hoge(val) { this.say = function () { console.log(val); } } // 引数を初期化する function moge(val) { this.val = val this.say = function () { console.log(this.val); } } var objHoge = new hoge('this is hoge'); objHoge.say(); var objMoge = new moge('this is moge') objMoge.say();

上記のパターンについてどんな違いがあるのでしょうか・・?
valを初期化する必要はあるのでしょうか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/05/14 10:17

私としては、コンストラクタ=classからobjectを生成するときに実行しなければならないメソッドっていう認識なのですが、コンストラクタをどのように認識していますか?それを日本語で書いて頂けるとありがたいです。
twin_bird

2017/05/14 10:43

 > 私としては、コンストラクタ=classからobjectを生成するときに実行しなければならないメソッドっていう認識  同じ認識ではあるのですが、なぜ実行する必要があるのかが理解できていない感じです。。
guest

回答2

0

ベストアンサー

まずコンストラクタの意味がちょっと違うように感じますが、初期化する意味については
たとえば必ず設定しないといけないような、boolean a;などがあるとして、インスタンスしたときにあとからa=true;などとしなかった場合、何かしらおかしなことになるので自分で初期化しなくても最初から基本設定を決めておいたほうが便利だからではないでしょうか。

リンク内容
たとえばこのような場合、上のほうを通ってほしいのに初期化してないと、下のほうを通ってしまいます。
また、初期化してないと最初はごみが入ってます。このごみが偶然123でありif(123==b)とかを条件にしてた場合、そこを通ってしまう場合があるかもしれません。自分の意図してない動きをさせないために、初期化はなるべくしておいたほうがいいのではないでしょうか。
ってこれってコンストラクタとかじゃなくて初期化の話だな。

投稿2017/05/14 10:36

編集2017/05/14 11:39
toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2017/05/14 10:45

回答ありがとうございます。 必ず設定しないといけない状況とは具体的にはどういう状況でしょうか? 質問部分で上げた例の場合は、`val`を必ずしも初期化する必要はないのでしょうか??
narita_takashi

2017/05/14 10:55

初期化する必要があるかどうかは、そのプログラムをどう作るかだと思います。
twin_bird

2017/05/14 11:46

コンストラクタ=初期化という誤ったイメージで質問していましたw 聞きたいのは初期化の話でした! 例を添えて頂きありがとうございます。 若干ぼんやりしているところもありますが、大体は理解できたような気がします!
guest

0

二つの違いはコンストラクタではなくプロパティのあるなしですね。

投稿2017/05/14 10:19

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2017/05/14 10:48

この2つの場合、どちらのほうが好ましいのでしょうか?
Zuishin

2017/05/14 10:52

この例に限って言うならどちらでも。 プロパティ実装の一例でしょう。特に必要なければ実装しなくて大丈夫ですが、そのうち必要な時が来ますから方法は覚えておいて下さい。
twin_bird

2017/05/14 11:42

返信ありがとうございます。 覚えておきますー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問