こんにちは.
JavaScriptにおいて, あるオブジェクトAの"コンストラクタ"と言った場合,その"コンストラクタ"はオブジェクトAを作成したコンストラクタを指すのでしょうか. それともAの子オブジェクトを作成するコンストラクタを指すのでしょうか.
宜しくお願い致します.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
オブジェクトAのコンストラクタは何を作成するか
- オブジェクトAが「A と命名された関数オブジェクト」なら自身を指します。
- オブジェクトAを生成した他の関数オブジェクトがあるなら、その関数オブジェクトを指します。
それともAの子オブジェクトを作成するコンストラクタを指すのでしょうか.
継承の関係について一切触れていない質問内容で、子オブジェクト を持ち出されても回答者は困惑するだけです。
開発者コンソールは修学目的でも使えます
- オブジェクトのツリーを開いて眺めてみる
- シンプルなコードを書いて試してみる
- 気になるプロパティを console.log() で表示してみる
dameo さん回答のコードを拝借して遊んだ例:
javascript
1function Original(){ 2 this.a = 0; 3} 4var A = new Original(); 5console.log( A.prototype ); // undefined 6console.log( A.__proto__ ); 7// [object Object]: {constructor: function Original(){this.a=0}} Edgeの場合 8// {constructor: f Original(), __proto__: } Chromeの場合 9// { constructor:function Original(), <prototype>: Object{...} } Firefox の場合 10 11console.log( A.__proto__ === Original.prototype ); // true 12console.log( A.__proto__.constructor === Original ); // true <== ご質問の本質
別の質問で提示されていた継承とプロトタイプチェーン の内容を思い出してください。
- 現在、非推奨だが実装は
__proto__
。- 混同してはいけないとの説明。
上記のような 実験を繰り返すだけ でも、次のような違いが感じられるはずです。
- コンストラクタ関数の
prototype
プロパティは、すべてのインスタンス用 - 生成されたオブジェクトの
__proto__
プロパティは、そのインスタンス用
投稿2019/12/05 09:09
総合スコア5434
0
JavaScriptにおいて, あるオブジェクトAの"コンストラクタ"と言った場合,その"コンストラクタ"はオブジェクトAを作成したコンストラクタを指すのでしょうか. それともAの子オブジェクトを作成するコンストラクタを指すのでしょうか.
JavaScript
1function Original() { 2 this.a = 0; 3} 4var A = new Original();
この状況で、
関数OriginalはオブジェクトAのコンストラクタか?と聞かれたら、答えはNoです。
関数OriginalはオブジェクトOriginalのコンストラクタか?と聞かれたら、答えはYesです。
JavaScriptの関数は同時にオブジェクトでもあります。
newを付けて呼べばコンストラクタに変身します。
先程のコードは以下でも全く同じです。
JavaScript
1class Original { 2 constructor() { 3 this.a = 0; 4 } 5} 6var A = new Original();
ただし、constructorとして宣言された場合は、newを伴わずに関数として呼び出すことは出来ません。
投稿2019/12/04 13:11
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/20 05:32
2019/12/24 12:04 編集
退会済みユーザー
2019/12/24 12:22
退会済みユーザー
2019/12/24 12:24
2019/12/24 12:30
2019/12/24 12:36
退会済みユーザー
2019/12/24 12:44
2019/12/24 15:20 編集
退会済みユーザー
2019/12/24 15:24
2019/12/24 15:50
退会済みユーザー
2019/12/24 16:30
2019/12/25 01:22
0
プロトタイプチェーン
ここ最近のslimatが質問されている「prototype関連の質問」ですが、
- author:slimat tag:javascript prototypeに関連する質問・回答の検索結果(1ページ目)|teratail
- author:slimat tag:javascript プロトタイプに関連する質問・回答の検索結果(1ページ目)|teratail
半年前に質問されたプロトタイプチェーンを理解すれば、挙動は全て理解できます。
本質問の「コンストラクタが生成するオブジェクト」も同様です。
学習の方向性
プロトタイプをさまざまな角度で質問しているようですが、まずは、根本となるプロトタイプチェーンの動きを理解する事に注力することをお勧めします。
基本を理解してから、応用にのぞむべきです。
Re: slimat さん
投稿2019/12/04 11:40
編集2019/12/04 11:41総合スコア18189
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/04 12:24
2019/12/04 23:43
2019/12/05 01:53
0
オブジェクトのコンストラクタといえばfunctionでしょう
クラスのコンストラクタもあるので混同は禁物です
javascript
1function hoge(x){ 2 this.x=x; 3} 4const a=new hoge(123); 5console.log(a.x);
上記、オブジェクトaのコンストラクタはhoge
投稿2019/12/04 10:16
総合スコア116688
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/04 12:21
2019/12/04 12:23
退会済みユーザー
2019/12/04 12:37
2019/12/05 00:42 編集
退会済みユーザー
2019/12/05 04:53
2019/12/05 05:12 編集
退会済みユーザー
2019/12/05 07:17
2019/12/05 07:42
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/20 04:59
2019/12/20 05:18 編集
2019/12/24 12:22 編集
2019/12/24 12:36
2019/12/24 15:46