質問: "いいいい"; console.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クラスが実体化(インスタンス化)したものあると認識しております。
回答: > > オブジェクトobjのプロパティ読み込みをするとき、最初に自分自身のプロパティを探し、次にMyclass.prototypeを探しま > > > 自身とは `MyClass` コンストラクタ上の `this` であり、`MyClass` のインスタンス(プロパティ参照時にプロトタイプチェーン規則によって `MyClass.prototype` を参照する)です。 `function MyClass` ではありません。 > > この「Myclass.prototypeを生成したコンストラクタ」というのもfunction Myclassで合っておりますか。 > > > 合っています。 > > Myclass.prototypeオブジェクトのコンストラクタがObjectオブジェクトというのは、どういうことなのでしょうか。 > > > `new` 演算子によって生成されるオブジェクトは `Object` を継承します。 ``` function Myclass() { this.x = 'a'; } var obj = new Myclass(); console.log(obj.x); // "a" console.log(obj.z); // undefined Myclass.prototype.z = 'b'; Myclass.prototype.x = 'c'; console.log(obj.z); // "b" ([[Prototype]] 上のプロパティ b を参照する) console.log(obj.x); // "a" (自身のプロパティ x を参照する) delete obj.x; // 自身のプロパティ x を削除する console.log(obj.x); // "c" (自身のプロパティ x が存在しない為、[[Prototype]] 上のプロパティ x を参照する) console.log(obj instanceof Object); // true console.log(obj.__proto__.__proto__ === Object.prototype); // true ``` Re: aaaaaaaa さん