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

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

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

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

Q&A

解決済

2回答

2447閲覧

コンストラクタは、どのように初期化するのか

aaaaaaaa

総合スコア501

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

0グッド

0クリップ

投稿2016/04/19 11:23

オブジェクトを生成し初期化するときは、プロトタイプを関数つまりコンストラクタにして呼ぶ。
しかし今までプロトタイプは、共通して利用したいメソッドやプロパティがあるときに利用し、クラスの振舞というか性質を暗示するものでコンストラクタは、実体化する前のインスタンスの原型、制約の緩いクラス程度にしか考えていませんでした。
このコンストラクタは、どのような手段、処理でオブジェクトを初期化するのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

コンストラクタについて誤解をしているように思えます。

コンストラクタはオブジェクトの初期化処理を行うものです。prototypeを用いて共通のメソッド・プロパティをもつオブジェクトは作れますが、一部だけ違うプロパティやメソッドを持たせたい場合はどうでしょうか?

例えば、人物を表すプロトタイプPersonをつくるとしましょう。

JavaScript

1var Person = function(sei, mei) { 2 this.sei = sei; 3 this.mei = mei; 4}; 5Person.prototype.fullname = function() { 6 return this.sei + " " + this.mei; 7}; 8var taro = new Person("鈴木", "太郎"); 9var hanako = new Person("佐藤", "花子"); 10console.log(taro.fullname()); 11console.log(hanako.fullname());

上記のようにhanakoとtaroではコンストラクタでseiとmeiを最初に設定して置かないと、fullname()が正しく返しません。もし、コンストラクタを使わなかったら、共通のメソッド・プロパティのみだったら、太郎君と花子ちゃんは同姓同名になってしまいます。

そして、JavaScirptでのコンストラクタは生成したオブジェクトをthisに束縛してプロトタイプになる関数を関数そのものとして呼び出すという決まりになっています。これは仕様として決まっているので、なぜそうなっているかというものではありません。newが評価された時点で必ずそのプロトタイプは関数として評価されます。もちろん何もしないコンストラクタも作ることはできます。コンストラクタはプロトタイプに付随した機能であり、プロトタイプと同レベルに考えたり、切り離して考えたりするものではありません。

投稿2016/04/19 22:42

raccy

総合スコア21735

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

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

0

デザインパターンの質問だと思うのですが、特に標準的な手法はないので、自分のやりやすいように設計すれば良いと思います。

JavaScript

1function Hoge1 (a) { this.a = a; } 2 3function Hoge2 (a) { Object.definedProperty(this, 'a', [value: a]; } 4 5function Hoge3 (a) { this.init(a); } 6Hoge3.prototype.init (a) { this.a = a; };

Re: aaaaaaaa さん

投稿2016/04/19 15:50

think49

総合スコア18162

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問