JS作成対象モードとそのオブジェクトプロトタイプチェーン探究(一):Objectモード


Objectモード
Objectのインスタンスを作成し、属性と方法を追加します.
これはカスタムオブジェクトを作成する最も簡単な方法です.
1.オブジェクトの作成
//   person  
var person = new Object();
person.name = "Mike";
person.age = 20;
person.job = "student";
person.showName = function(){   
    console.log("this.name = " + this.name);
};

person.consThis = function(){
    console.log("this = "); 
    console.log(this);  // this  person   
    console.log(this === person);
};

person.showName();
person.consThis();
出力は図のようです
2.person.showName属性引用の関数を観察する
// person.showName          , name   ""
console.log("person.showName.name=");
console.log(person.showName.name);
console.log(person.showName.name === "")
console.log("-----   -----");

// showName        prototype         
console.log("person.showName.prototype=");
console.log(person.showName.prototype);
console.log(person.showName.prototype === Function.prototype);      //  Function         
console.log("-----   -----");

//      constructor    showName       
console.log("person.showName.prototype.constructor=");      
console.log(person.showName.prototype.constructor);     
console.log("-----   -----");

//            __proto__    Object         
console.log("person.showName.prototype.__proto__=");
console.log(person.showName.prototype.__proto__);
console.log(person.showName.prototype.__proto__ === Object.prototype);
console.log("-----   -----");

// showName        __proto__    Function.prototype
console.log("person.showName.__proto__=");      //showName          ,             Function   
console.log(person.showName.__proto__);     //showName          ,             Function   
//   
console.log(person.showName.__proto__ === Function.prototype);  //true
console.log("-----   -----");
showName属性参照の匿名関数情報:
出力は図のようです
3.personオブジェクトに関わるプロトタイプチェーンを観察するObject構築関数のプロトタイプチェーン
// prototype    Object         
console.log("Object.prototype=");
console.log(Object.prototype);
// Object          constructor       
console.log("Object.prototype.constructor=");
console.log(Object.prototype.constructor);
console.log("-----   -----");

//      (      ) __proto__     Function         
// __proto__  Function         , Function.prototype
console.log("Object.__proto__=");
console.log(Object.__proto__);  
console.log(Object.__proto__ === Function.prototype);   
console.log("-----   -----");
personオブジェクトのプロトタイプチェーン
// person   ,   ,    prototype  
console.log("person.prototype=");
console.log(person.prototype);
console.log("-----   -----");

//      __proto__        prototype
// person __proto__             , Object         
console.log("person.__proto__=");
console.log(person.__proto__);
//   
console.log(person.__proto__ === Object.prototype)  //true
console.log("-----   -----");
構造関数の原型オブジェクトの種類
// Function.prototype    function
console.log("typeof Function.prototype:");
console.log(typeof Function.prototype); 
//   Function          function,              object
// Object.prototype    object
console.log("typeof Object.prototype:");
console.log(typeof Object.prototype);
// Array.prototype    object
console.log("typeof Array.prototype:");
console.log(typeof Array.prototype);
console.log("-----   -----");
FunctコンストラクタのプロトタイプオブジェクトとObjectコンストラクタのプロトタイプオブジェクトの関係
// Function.prototype.__proto  Objcet.prototype
console.log("Function.prototype.__proto__=");
console.log(Function.prototype.__proto__);
//   
console.log(Function.prototype.__proto__ === Object.prototype); //true
//                 JS  ,        /     。       Object.prototype      :toString、valueOf、hasOwnProperty 。
console.log("-----   -----");

// Object.prototype.__proto  null
console.log("Object.prototype.__proto__=");
console.log(Object.prototype.__proto__);
//       , null。
プロトタイプ分析
  • すべてのコンストラクタ/関数の_プロト全部Function.prototype
  • を指します.
  • すべてのオブジェクトの_プロトそのコンストラクタを指すプロトタイプ
  • Functコンストラクタのプロトタイプを除いてfunction、その他のコンストラクタのプロトタイプはobject
  • である.
  • すべてのコンストラクタも普通のJSオブジェクトであり、コンストラクタに属性などを追加/削除することができます.Object.prototypeのすべての方法を継承しています.toString、valueOf、hasOwnPropertyなどです.
  • personオブジェクトはObjectコンストラクタによって作成されたので、その_プロトObject.prototypeを指す
  • 原型チェーン図
    personオブジェクトのプロトタイプチェーン図:
    personオブジェクトshowName属性参照の匿名関数のプロトタイプチェーン図: