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

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

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

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

オブジェクト指向

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

コンストラクタ

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

JavaScript

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Q&A

1回答

1969閲覧

Myclass.prototypeのコンストラクタとObjectの違い

aaaaaaaa

総合スコア501

オブジェクト

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

オブジェクト指向

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

コンストラクタ

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

JavaScript

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

0グッド

0クリップ

投稿2016/06/17 11:43

編集2022/01/12 10:55

下記のソースについての質問です。

javascript

1function Myclass() { 2 this.x = "ああああ"; 3} 4 5var obj = new Myclass(); 6console.log(obj.x);//ああああ 7 8console.log(obj.z);//undefined 9 10Myclass.prototype.z = "いいいい"; 11console.log(obj.z);//いいいい

Myclass.prototypeを探してもインスタンス(obj)が読み込んだプロパティが見つからない場合、Myclass.prototypeを生成したコンストラクタのprototypeオブジェクト(__proto__)のプロパティを探します。
この「Myclass.prototypeを生成したコンストラクタ」というのは、function Myclassです。function Myclassが生成されることでMyclass.prototypeが自動で生成されると認識しておるので、
そう考えました。しかし、パーフェクトjavascript(142p)という書籍では、Myclass.prototypeオブジェクトのコンストラクタは、デフォルトだとObjectオブジェクトであると、書いてありました。つまり、Myclass.prototypeのコンストラクタは、MyclassではなくObjectということだと解釈しました。
ここで疑問ですが、
「Myclass.prototypeを生成したコンストラクタ、つまりfunction Myclass」と、書籍に記述されていた「Myclass.prototypeオブジェクトのコンストラクタは、デフォルトだとObjectオブジェクト」には、どのような違いがあるのでしょうか。単語としてのObjectオブジェクトは、あらゆるオブジェクトが継承しているオブジェクトでFunctionクラスから生まれたもの、Myclassがユーザ定義関数で、Functionクラスが実体化(インスタンス化)したものあると認識しております。

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

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

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

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

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

guest

回答1

0

オブジェクトobjのプロパティ読み込みをするとき、最初に自分自身のプロパティを探し、次にMyclass.prototypeを探しま

自身とは MyClass コンストラクタ上の this であり、MyClass のインスタンス(プロパティ参照時にプロトタイプチェーン規則によって MyClass.prototype を参照する)です。
function MyClass ではありません。

この「Myclass.prototypeを生成したコンストラクタ」というのもfunction Myclassで合っておりますか。

合っています。

Myclass.prototypeオブジェクトのコンストラクタがObjectオブジェクトというのは、どういうことなのでしょうか。

new 演算子によって生成されるオブジェクトは Object を継承します。

JavaScript

1function Myclass() { 2 this.x = 'a'; 3} 4 5var obj = new Myclass(); 6console.log(obj.x); // "a" 7console.log(obj.z); // undefined 8 9Myclass.prototype.z = 'b'; 10Myclass.prototype.x = 'c'; 11console.log(obj.z); // "b" ([[Prototype]] 上のプロパティ b を参照する) 12console.log(obj.x); // "a" (自身のプロパティ x を参照する) 13 14delete obj.x; // 自身のプロパティ x を削除する 15console.log(obj.x); // "c" (自身のプロパティ x が存在しない為、[[Prototype]] 上のプロパティ x を参照する) 16 17console.log(obj instanceof Object); // true 18console.log(obj.__proto__.__proto__ === Object.prototype); // true

Re: aaaaaaaa さん

投稿2016/06/17 11:59

編集2016/06/17 22:25
think49

総合スコア18156

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

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

aaaaaaaa

2016/06/20 08:42

ご回答有難うございました。 つまり、Myclass.prototypeを生成したコンストラクタは、MyclassでもありObjectオブジェクトでもあるということですか。 MyclassでもありObjectでもある理由は、objがObjectオブジェクトを継承しているからですね。
think49

2016/06/22 08:29 編集

> つまり、Myclass.prototypeを生成したコンストラクタは、MyclassでもありObjectオブジェクトでもあるということですか。 何かもやもやするのですが、「Myclass.prototypeを生成したコンストラクタ」とはMyClassの事でしょうか。別のものを指すのでしょうか。 Myclass.prototypeは生成するものではなく、関数が始めから持っているものです。 「[[Construct]] を持つオブジェクト(関数)」はprototypeを持ちます。
aaaaaaaa

2016/06/22 10:44

ご返答有難うございます。 >>Myclass.prototypeを生成したコンストラクタ 書籍(パーフェクトjavascript142p)には、Objectだと書いてあり混乱しておりますが、objectであるとの記述を書籍で見るまでは、Myclassがコンストラクタであろうと認識していますし、回答文を見る限りやはり間違っていなかったのかもしれません。 >>Myclass.prototypeは生成するものではなく 「MyClass.prototypeオブジェクトを生成したコンストラクタのprototypeオブジェクトのプロパティを探します。」とパーフェクトjavascript(142p)に記載されていて、この「生成したコンストラクタ」をMyclassだと認識しており、Myclassが呼び出されると生成されるのだろう、と思っておりましたが違うのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問