JavaScript——対象に向ける(一)
3025 ワード
「オブジェクト指向プログラミング」(Object Oriented Programeming)は、現在主流のプログラミングモデルです.その核心思想は真実な世界の中の各種の複雑な関係を抽象的に一つの対象として、そして対象の間の分業と協力によって、真実な世界に対するシミュレーションを完成します.
オブジェクト
1、対象は実物に対する抽象です.実物が「対象」に抽象されると、実物の関係は「対象」の関係になり、現実の状況をシミュレーションし、「対象」に対してプログラミングすることができます.2、「対象」は容器で、「属性」と「方法」をカプセル化しています.属性とは、オブジェクトの状態のことです.「方法」とは、対象の行為(ある任務を遂行すること)です.例えば、私達は動物をイメージしてアニマルの対象にすることができます.「属性」記録は具体的にその動物です.「方法」は動物のある行動(走る、狩り、休憩など)を表します.
構造関数
1、「対象」は単体の抽象的なもので、一般的にはテンプレート(概念はCSSのクラスに類似しています.)によって一つの事物の共通の特性を表し、対象はテンプレートによって生成されます.JavaScript言語の対象体系は、「クラス」に基づくものではなく、構造関数とプロトタイプチェーンに基づくものです.2、JavaScriptは、コンストラクタを生成対象のテンプレートとして使用し、テンプレートを通してオブジェクトの基本構造を記述します.一つのコンストラクタは、同じ構造のオブジェクトを複数生成することができます.例えば、関数体の内部にはthisキーワードが使用され、生成する対象の例を表しています. でオブジェクトを生成する場合は、newコマンドを使用して、Vehicle関数を呼び出す必要があります. newコマンド
1、newコマンドの役割は、構造関数を実行して、インスタンスオブジェクトを返します.
オブジェクトの属性はプロトタイプチェーンによって自身の属性と継承の属性に分類されます.1、Object.getOwn PropertyNames()この方法は1つの配列に戻り、メンバーは対象自体の属性のすべてのキー名であり、継承された属性キー名は含まれない.それらの列挙可能な属性だけを取得してObject.keys方法を使用します.2、hasOwnProperty()この方法は、ある属性がオブジェクト自身に定義されているか、それともプロトタイプチェーンに定義されているかを判断するためのブール値を返す.JSで唯一のオブジェクト属性を扱う場合、プロトタイプチェーンを巡回しない方法です.3、in演算子in演算子は、1つのオブジェクトが属性を持つかどうかを示すブール値を返します.この属性は対象自身の属性か、継承の属性かを区別しません.4、for…inサイクル獲得対象の全てのエニュメレート・属性(自身でも継承でも)
オブジェクト
1、対象は実物に対する抽象です.実物が「対象」に抽象されると、実物の関係は「対象」の関係になり、現実の状況をシミュレーションし、「対象」に対してプログラミングすることができます.2、「対象」は容器で、「属性」と「方法」をカプセル化しています.属性とは、オブジェクトの状態のことです.「方法」とは、対象の行為(ある任務を遂行すること)です.例えば、私達は動物をイメージしてアニマルの対象にすることができます.「属性」記録は具体的にその動物です.「方法」は動物のある行動(走る、狩り、休憩など)を表します.
構造関数
1、「対象」は単体の抽象的なもので、一般的にはテンプレート(概念はCSSのクラスに類似しています.)によって一つの事物の共通の特性を表し、対象はテンプレートによって生成されます.JavaScript言語の対象体系は、「クラス」に基づくものではなく、構造関数とプロトタイプチェーンに基づくものです.2、JavaScriptは、コンストラクタを生成対象のテンプレートとして使用し、テンプレートを通してオブジェクトの基本構造を記述します.一つのコンストラクタは、同じ構造のオブジェクトを複数生成することができます.例えば、
var Cat = function () {
this.name = "dog";
};
3、構造関数の特徴1、newコマンドの役割は、構造関数を実行して、インスタンスオブジェクトを返します.
var Cat = function () {
this.name = "dog";
};
var bark = new Cat()
bark.name //"dog"
//new , Cat , bark 。
// , Cat name 。
// new , this, ,
//this.name name , “dog”
2、newコマンドを使用する場合、必要に応じて、構造関数もパラメータを受け入れることができます.var Cat = function (a) {
this.name = a;
};
var bark = new Cat("dog")
bark.name //"dog"
3、new命令自体は構造関数を実行することができますので、後ろの構造関数は括弧を持ってもいいし、括弧を持たなくてもいいです.次の2行のコードは等価です.var bark = new Cat()
var bark = new Cat
4、newコマンドの使用を忘れて、直接構造関数を呼び出します.var Cat = function () {
this.name = "dog";
};
var bark = Cat()
//TypeError: Cannot read property 'name' of undefined
// Cat , new 。
// ,name , bark undefined。
解決策は、構造関数の内部でnewコマンドが使用されているかどうかを判断し、使用されていないことが判明したら、直接にインスタンスオブジェクトに戻ります.function Fubar(foo, bar){
if (!(this instanceof Fubar)) {
return new Fubar(foo, bar);
}
this._foo = foo;
this._bar = bar;
}
Fubar(1, 2)._foo // 1
(new Fubar(1, 2))._foo // 1
Objectオブジェクトと継承オブジェクトの属性はプロトタイプチェーンによって自身の属性と継承の属性に分類されます.1、Object.getOwn PropertyNames()この方法は1つの配列に戻り、メンバーは対象自体の属性のすべてのキー名であり、継承された属性キー名は含まれない.それらの列挙可能な属性だけを取得してObject.keys方法を使用します.2、hasOwnProperty()この方法は、ある属性がオブジェクト自身に定義されているか、それともプロトタイプチェーンに定義されているかを判断するためのブール値を返す.JSで唯一のオブジェクト属性を扱う場合、プロトタイプチェーンを巡回しない方法です.3、in演算子in演算子は、1つのオブジェクトが属性を持つかどうかを示すブール値を返します.この属性は対象自身の属性か、継承の属性かを区別しません.4、for…inサイクル獲得対象の全てのエニュメレート・属性(自身でも継承でも)
var o1 = {name:"cat"};
var o2 = Object.create(o1,{
someOne:{
like:"music",
enumerable:true
}
});
for(var s in o2){
console.log(s);
}
for…inとhasOwnProperty()を結合すると、すべての自身属性が得られます.var obj = {p1:12,p2:23,p3:34,p4:45}
var a=[];
for ( var name in obj ) {
if ( obj.hasOwnProperty(name) ) {
a.push(name);
}
}
console.log(a);//["p1", "p2", "p3", "p4"]