JS作成対象モードとそのオブジェクトプロトタイプチェーン探究(一):Objectモード
7756 ワード
Objectモード
Objectのインスタンスを作成し、属性と方法を追加します.
これはカスタムオブジェクトを作成する最も簡単な方法です.
1.オブジェクトの作成
2.person.showName属性引用の関数を観察する
出力は図のようです
3.personオブジェクトに関わるプロトタイプチェーンを観察するすべてのコンストラクタ/関数の_プロト全部Function.prototype を指します.すべてのオブジェクトの_プロトそのコンストラクタを指すプロトタイプ Functコンストラクタのプロトタイプを除いてfunction、その他のコンストラクタのプロトタイプはobject である.すべてのコンストラクタも普通のJSオブジェクトであり、コンストラクタに属性などを追加/削除することができます.Object.prototypeのすべての方法を継承しています.toString、valueOf、hasOwnPropertyなどです. personオブジェクトはObjectコンストラクタによって作成されたので、その_プロトObject.prototypeを指す 原型チェーン図
personオブジェクトのプロトタイプチェーン図:
personオブジェクトshowName属性参照の匿名関数のプロトタイプチェーン図:
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。
プロトタイプ分析personオブジェクトのプロトタイプチェーン図:
personオブジェクトshowName属性参照の匿名関数のプロトタイプチェーン図: