JavaScript_js でのオブジェクト指向の概要 オブジェクト指向

WBOY
リリース: 2016-05-16 17:52:16
オリジナル
1714 人が閲覧しました

オブジェクト
作成
オブジェクト
コンストラクター
パブリック、プライベート、特権、静的メンバー
これを呼び出し、適用します
例外処理
継承
プロトタイプ
オブジェクト
JavaScript ではすべてがオブジェクトであると言えますが、オブジェクトとは何ですか?オブジェクトは変数と関数の集合です。他のオブジェクト指向言語では、オブジェクトはクラスからインスタンス化されます。JavaScript は、既存のオブジェクトのコピーから派生するプロトタイプベースのオブジェクト指向言語です。 JavaScript のオブジェクトは、関数とオブジェクトの 2 つのカテゴリに分類できます。

オブジェクトの作成

効率を向上させるために、JavaScript には Object、Function、Array などの組み込みオブジェクトが付属しています。すべての組み込みオブジェクトは、新しいものを通して創造されます。関数オブジェクトは、インスタンスとコンストラクターの 2 つのカテゴリに分類されます。たとえば、alert('my name is X') は Function のインスタンスであり、コンストラクターとして Function は new を通じてインスタンス化される必要があります。作成されたオブジェクトの構文は次のタイプに分かれています。

コードをコピーします コードは次のとおりです:

var obj= new Object();var obj={};(配列など)
var myFunction=new Function(){//code};function myFunction(){//code}

関数宣言の最初のタイプは使用前に行う必要がありますが、2 番目のタイプは使用後に行うことができることに注意してください。

コンストラクター

関数はコンストラクターの開始点です。コンストラクターの作成は、
コードをコピー コードは次のとおりです:
var myFunction=new Function('a',/*code*/)
function myFunction(a){
/*Code*/
}

ただし、最初の関数にはパフォーマンスの問題があるため、関数の特性を考慮して 2 番目の関数を使用することをお勧めします。オブジェクトは、そのインスタンスがコンストラクターとしても使用できることです。


静的メンバー
次のコード:

コードをコピーコードは次のとおりです:
var myObj= new Object();
//名前属性を追加
myObj.name='LD';
//alertName メソッドを追加します>myObj .alertName=function(){
alert(this.name);
}
//alertName
myObj.alertName()


を実行します。 alertName は、コンストラクター内ではなく、myObj インスタンス内にのみ存在します。これは理解するのは簡単ですが、次のように、コンストラクターとインスタンスの両方になることができる Function については、それほど簡単ではありません:


var myConstructor=new function(){
//静的属性を追加します
myConstructor.name='LD'; //静的メソッドを追加します
myConstructor.alertName=function(){
alert(this.nam);
}
myConstructor.alertName(); 🎜>コード myConstructor はインスタンスにできるため、これは正常に機能しますが、name とalertName は myConstructor の新しいインスタンスには適用されません。


パブリック メンバー

オブジェクトのインスタンス化に従うことができるメンバーはパブリック メンバーと呼ばれ、パブリック メンバーになるには、関数のプロトタイプを変更する必要があります。つまりプロトタイプ。パブリック メソッドは、次のようにコンストラクターとともに継承できます。


コードをコピー


コードは次のとおりです:
function myConstructor(){ } //パブリック プロパティを追加myConstructor.prototype.myName='LD'; //インスタンス化
var myObj=new myConstructor() ;
alert(myObj.myName);


myConstructor によってインスタンス化されたオブジェクトは myName を使用できますが、myConstructor インスタンス自体ではなく myConstructor の基になる定義にパブリック メンバーを追加したため、myConstructor 自体は使用できません。 。
プライベート メンバー
プライベート メンバーは、コンストラクターで定義された変数とメソッドを指します。これらは、他の言語のクラスのプライベート定義に似ています。たとえば、



コードをコピーします


コードは次のとおりです:
function myConstructor(){ //プライベート属性を追加しますvar myName='Ld'l //プライベートメソッドを追加します varalertName=function(){
alert('LD')
}
alertName();

特権メンバー

特権メソッドは、パブリックにアクセスできるメソッドを指し、これで定義されたメソッドは常にコンストラクター スコープで使用されます。
コードをコピー コードは次のとおりです:

function myConstructor (){
//プライベート属性
var sex='male';
// 特権メソッド
this.alertSex=function(){
alert(sex); 🎜>}
}



オブジェクト リテラル
以前に使用した作成では、たとえば、myConstructor.name=x; のようにドットを使用しました。 myConstructor .sex=x。同じ目的を達成するためにオブジェクト リテラルを使用することもできます。例:

コードをコピー コードは次のとおりです:
function myConstructor(){
}
//パブリック メンバーを追加
myConstructor.prototype={
name:'LD',
性別:'male',
method :function(){}
}

オブジェクト リテラルの区切り文字はカンマであり、最後のプロパティまたはメソッドの末尾にカンマがないことに注意してください。解析エラー。
this, call and apply
this は実行環境に依存するキーワードであり、作成場所とは関係ありません。this キーワードは、それを含む関数を使用するオブジェクトを指します。他の言語でも、これを理解するのは難しくありません。
呼び出してメソッドを強制的にオブジェクトにアタッチします。例:

コードをコピー コードは次のとおりです。 🎜>
//alertName は作成された関数です
//alertName にはパラメータは必要ありません
alertName.call('object')
//alertName にはパラメータが必要です
alertName.call('object','parameter1','parameter2')
//alertName がパラメータ配列を使用する場合
alertName.appplay('object','parameter array argument')



例外処理

は C# に似ており、次のように try と catch で構成されます。


function myFunction(){
window.style.color='red';
}
try {
myFunction();
}
catch{
alert('例外メッセージ:'例外.名前例外.メッセージ)
}


継承とプロトタイプ他にもあるので、次のブログ「JavaScript の継承とプロトタイプ」に載せます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート