JavaScriptにおけるオブジェクト指向概念シミュレーション
2902 ワード
はじめに
hi、このシリーズの中で、JavaScriptを勉強している時、JavaScriptという言語と実際のプロジェクトでの運用についての理解と心得を少しずつ書きます.
C〓〓〓〓とJava言語の中で、対象に向かうのは種類の方式で実現したので、特にこの特性を継承して、種類の方式は強大な機能を表して、その上も学びやすいです.JavaScriptは純粋な対象に向けた言語ではなく、対象の言語に基づいて、対象の継承はプロトタイプ関数として継承されています.JavaScriptはプロトタイプ関数として対象向けの技術を実現しています.
二、原型オブジェクトの概要
JavaScriptオブジェクトごとに原型オブジェクトがあり、対象はすべて原型オブジェクトの属性を継承します.オブジェクトのプロトタイプは、オブジェクトを作成するコンストラクターによって定義されています.JavaScripptdのすべての関数はプロトタイプという属性を持っています.この属性はプロトタイプのオブジェクトを参照しています.このプロトタイプのオブジェクトは初期化時にはconstructor属性だけがプロトタイプのオブジェクトを作成する対象を参照してください.
JavaScriptにはクラス定義の概念がなく、構造関数はクラスを定義し、クラスの属性を初期化します.各クラスのメンバーは原型のオブジェクトから同じ属性を継承します.つまり、原型のオブジェクトはクラスのインスタンス共有の属性と方法を提供します.これはメモリを節約します.
オブジェクトの属性を読み取るときは、JavaScriptは対象から検索します.もし見つけられなかったら、プロトタイプのオブジェクトにその属性(または方法)を検索します.ですから、特に、プロトタイプのオブジェクトに保存して共有しやすくし、メモリを節約する目的があります.プロトタイプのオブジェクトには強力な機能があります.それは、いくつかのオブジェクトをコンストラクタによって具体化した後、コンストラクタのプロトタイプオブジェクトに属性と方法を追加すると、その本来の例示的なオブジェクトインスタンスは、これらの増加した属性と方法を引き継ぎます.
三、オブジェクトの属性、オブジェクトの方法、クラスの属性、クラスの方法は、各オブジェクトにそれぞれ独自の例示的な属性と方法のコピーがあり、5つのオブジェクトを実装すると、5つのオブジェクトの例示的な属性と方法のコピーがあります.Thisのキーワードはそれらの実例的なオブジェクトを引用します.つまり、実例的な方法を操作した人は、thisを引用します.どのインスタンスオブジェクトの属性にアクセスしましたか?thisはこのインスタンスオブジェクトを参照します.
クラスの方法とクラスの属性は一つのコピーしかありません.種類の方法で呼び出す時はクラスの名前を引用しなければなりません.例えば、Date.set Hours().実例的な属性、実例的な方法、クラス属性、クラス方法をコードで表現します.
JavaScriptはサブクラス化をサポートしており、サブクラスのプロトタイプのオブジェクトを超カテゴリで実例化すればいいですが、このようなクラス化の後に問題があります.超クラスのインスタンス化子類のプロトタイプのオブジェクトで取得したので、自分自身のJavaScriptから提供されたconstructor属性を突き落として、strutorの正確性を確保するために、サブクラス化の手順例は以下の通りです.
hi、このシリーズの中で、JavaScriptを勉強している時、JavaScriptという言語と実際のプロジェクトでの運用についての理解と心得を少しずつ書きます.
C〓〓〓〓とJava言語の中で、対象に向かうのは種類の方式で実現したので、特にこの特性を継承して、種類の方式は強大な機能を表して、その上も学びやすいです.JavaScriptは純粋な対象に向けた言語ではなく、対象の言語に基づいて、対象の継承はプロトタイプ関数として継承されています.JavaScriptはプロトタイプ関数として対象向けの技術を実現しています.
二、原型オブジェクトの概要
JavaScriptオブジェクトごとに原型オブジェクトがあり、対象はすべて原型オブジェクトの属性を継承します.オブジェクトのプロトタイプは、オブジェクトを作成するコンストラクターによって定義されています.JavaScripptdのすべての関数はプロトタイプという属性を持っています.この属性はプロトタイプのオブジェクトを参照しています.このプロトタイプのオブジェクトは初期化時にはconstructor属性だけがプロトタイプのオブジェクトを作成する対象を参照してください.
JavaScriptにはクラス定義の概念がなく、構造関数はクラスを定義し、クラスの属性を初期化します.各クラスのメンバーは原型のオブジェクトから同じ属性を継承します.つまり、原型のオブジェクトはクラスのインスタンス共有の属性と方法を提供します.これはメモリを節約します.
オブジェクトの属性を読み取るときは、JavaScriptは対象から検索します.もし見つけられなかったら、プロトタイプのオブジェクトにその属性(または方法)を検索します.ですから、特に、プロトタイプのオブジェクトに保存して共有しやすくし、メモリを節約する目的があります.プロトタイプのオブジェクトには強力な機能があります.それは、いくつかのオブジェクトをコンストラクタによって具体化した後、コンストラクタのプロトタイプオブジェクトに属性と方法を追加すると、その本来の例示的なオブジェクトインスタンスは、これらの増加した属性と方法を引き継ぎます.
三、オブジェクトの属性、オブジェクトの方法、クラスの属性、クラスの方法は、各オブジェクトにそれぞれ独自の例示的な属性と方法のコピーがあり、5つのオブジェクトを実装すると、5つのオブジェクトの例示的な属性と方法のコピーがあります.Thisのキーワードはそれらの実例的なオブジェクトを引用します.つまり、実例的な方法を操作した人は、thisを引用します.どのインスタンスオブジェクトの属性にアクセスしましたか?thisはこのインスタンスオブジェクトを参照します.
クラスの方法とクラスの属性は一つのコピーしかありません.種類の方法で呼び出す時はクラスの名前を引用しなければなりません.例えば、Date.set Hours().実例的な属性、実例的な方法、クラス属性、クラス方法をコードで表現します.
function Mobile(kind, brand) {
this.kind = kind;// , Android、ios
this.brand = brand;// ,this
}
/**
, 。
*/
// ,
Mobile.prototype.dial = function (phoneNo) {
return phoneNo;
};
/**
, , ,
, , this, 。
*/
//
Mobile.turnOn = function () {
return "The power of mobile is on";
}
Mobile.turnOff = function () {
return "The power of mobile is off";
}
三、サブクラス化JavaScriptはサブクラス化をサポートしており、サブクラスのプロトタイプのオブジェクトを超カテゴリで実例化すればいいですが、このようなクラス化の後に問題があります.超クラスのインスタンス化子類のプロトタイプのオブジェクトで取得したので、自分自身のJavaScriptから提供されたconstructor属性を突き落として、strutorの正確性を確保するために、サブクラス化の手順例は以下の通りです.
function SmartPhone(os) {
this.os=os;
}
私たちはMobileオブジェクトをそのプロトタイプとしています.これは新しいタイプのインスタンスがSmartPhone.prototypeの後者をMobile.prototypeに継承されることを意味します.Mobile.prototypeはまたObject.prototypeによってもたらされます.SmartPhone.prototype=new Mobile(GSM,Nokia);
// , Email :
Email SmartPhone.prototype.sendEmail=function(emailAddress) {
return this.emailAddress
}
しかし、上記のサブクラス化方法には少し欠陥があります.SmartPhone.prototypeを私たちが作成したオブジェクトとして明確に設定したので、JSが提供したプロトタイプのオブジェクトをカバーし、与えられたContstructor属性を廃棄しました.この属性は、このオブジェクトを作成するためのコンストラクターを参照します.しかし、スマートフォンのオブジェクトは、父の種類のconstructorを集めています.それ自体はこの属性を持っていません.属性を明確に設定しています.この問題を解決することができます.SmartPhone.prototype.constructor=SmartPhone;
var objSmartPhone = new SmartPhone();