JavaScript対象向けプログラミング
7168 ワード
オブジェクト指向プログラミング
6.1理解対象 Object.getOwn PropertyDescriptor(book,year)属性の特性を読み出す 6.2オブジェクトを作成する
6.2.1工場モード
具体的なオブジェクトを作成するプロセスを抽象化しました.
構造と工場の違い:1.表示されていない作成対象2.直接属性と方法をthisオブジェクトに与えました.3.return文がありません.
注:カスタム関数を作成するコンストラクタは、彼のインスタンスを特定のタイプとして識別することを意味します.これも工場モデルよりも構造パターンが優れているところです.
コンストラクタの問題:各方法は各インスタンスで再作成されます.
6.2.3プロトタイプモード
私たちが作成した各関数には、
プロトタイプの問題:第一:プロトタイプに属性が参照タイプがあると、そのプロトタイプを継承したすべてのインスタンスは一つの属性の参照タイプを共有します.第二に、サブタイプのインスタンスを作成すると、超タイプの構造関数にパラメータを転送できません.
6.2.4コンストラクタモードとプロトタイプモードを使用する
構造関数モードは、例示的な属性を定義するために使用され、プロトタイプパターンは、方法と共有の属性を定義するために使用されます.結果として、各インスタンスは、自分のインスタンス属性のコピーを持っていますが、方法の参照を共有しながら、メモリを最大限に節約します.さらに,構造関数へのパラメータの伝達も支援した.
6.2.5ダイナミックプロトタイプモード
プロトタイプを初期化する必要があるかどうかは、あるべき方法が有効かどうかを検出することによって決定される.
6.3継承
6.3.1プロトタイプチェーン
方法:原型オブジェクトを別のタイプのインスタンスに向ける
6.3.2構造関数を借りる
プロトタイプチェーンを使用してプロトタイプの属性と方法の継承を実現し,構造関数を借りることによってインスタンス属性の継承を実現した.複合継承はプロトタイプ鎖と借用構造関数の欠陥を回避し,両者の利点を融合させた.
6.3.4原型式継承
プロトタイプに基づいて既存のオブジェクトに基づいて作成することができます.
プロトタイプ継承と密接に関連しており、パッケージ継承プロセスに使用されます.
結合継承はどの場合でも二次構造関数を呼び出すからである.一度はサブタイプのプロトタイプを作成するとき、二番目はサブタイプのコンストラクタの内部にある.サブタイプのプロトタイプを最初に作成すると、構造関数の属性は継承されますが、プロトタイプのオブジェクトに格納され、2回目にオブジェクトを作成して、プロトタイプのオブジェクトに格納されている属性を上書きします.
6.1理解対象
Object.defineProperties Object.defineProperty
1.データ属性-configrable-enumerable-writable-value 2.アクセス器属性-get-set-configrable-enumerable"use strict";
var book = {
_year: 2004,// , 。_
edition: 1,
visTimes:0
};
Object.defineProperty(book, 'year', { // year
get: function() {
this.visTimes++;
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
},
enumerable:false,
configurable:true
});
book.year = 2005;
Object.getOwnPropertyDescriptor(book,"year");
カスタムアクセス属性を設定するgetとset方法により、アクセス回数を記録するなど多くのことができます.6.2.1工場モード
具体的なオブジェクトを作成するプロセスを抽象化しました.
function createPerson (name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
console.log(this.name);
}
return o;
}
6.2.2コンストラクタモード構造と工場の違い:1.表示されていない作成対象2.直接属性と方法をthisオブジェクトに与えました.3.return文がありません.
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
console.log(this.name);
}
}
var person = new Person("wilson",20,"student");
person.sayName(); //
Person("wilson2",21,"student"); //
window.sayName();
var o = new Object();
Person.apply(o,["wilson3",22,"student"]) //
o.sayName();
コンストラクタの4つのステップ:1.新しいオブジェクトを作成します.2.コンストラクタのスコープを新しいオブジェクトに割り当てます.3.コンストラクタのコードを実行します.4.新しいオブジェクトを返します.注:カスタム関数を作成するコンストラクタは、彼のインスタンスを特定のタイプとして識別することを意味します.これも工場モデルよりも構造パターンが優れているところです.
コンストラクタの問題:各方法は各インスタンスで再作成されます.
6.2.3プロトタイプモード
私たちが作成した各関数には、
prototype
属性があります.この属性は、オブジェクトを指すポインタであり、このオブジェクトの用途は、特定のタイプのすべてのインスタンスによって共有できる属性と方法を含むものです.プロトタイプの問題:第一:プロトタイプに属性が参照タイプがあると、そのプロトタイプを継承したすべてのインスタンスは一つの属性の参照タイプを共有します.第二に、サブタイプのインスタンスを作成すると、超タイプの構造関数にパラメータを転送できません.
6.2.4コンストラクタモードとプロトタイプモードを使用する
構造関数モードは、例示的な属性を定義するために使用され、プロトタイプパターンは、方法と共有の属性を定義するために使用されます.結果として、各インスタンスは、自分のインスタンス属性のコピーを持っていますが、方法の参照を共有しながら、メモリを最大限に節約します.さらに,構造関数へのパラメータの伝達も支援した.
6.2.5ダイナミックプロトタイプモード
プロトタイプを初期化する必要があるかどうかは、あるべき方法が有効かどうかを検出することによって決定される.
6.3継承
6.3.1プロトタイプチェーン
方法:原型オブジェクトを別のタイプのインスタンスに向ける
6.3.2構造関数を借りる
function SuperType(){
this.property = true;
}
function SubType(){
SuperType.call(this,"wilson"); // SuperType,
this.age = 20;
}
var instance = new SubType();
6.3.3グループ引継ぎプロトタイプチェーンを使用してプロトタイプの属性と方法の継承を実現し,構造関数を借りることによってインスタンス属性の継承を実現した.複合継承はプロトタイプ鎖と借用構造関数の欠陥を回避し,両者の利点を融合させた.
6.3.4原型式継承
プロトタイプに基づいて既存のオブジェクトに基づいて作成することができます.
function object(o){
function F(){}
F.prototype = o;
return new F();
}
ECMA5 Object.create()
6.3.5寄生式引継ぎプロトタイプ継承と密接に関連しており、パッケージ継承プロセスに使用されます.
function createAnother(original){
"use strict";
var clone = Object.create(original);
clone.sayHi = function () {
alert("hi");
};
return clone;
}
6.3.6寄生結合式継承結合継承はどの場合でも二次構造関数を呼び出すからである.一度はサブタイプのプロトタイプを作成するとき、二番目はサブタイプのコンストラクタの内部にある.サブタイプのプロトタイプを最初に作成すると、構造関数の属性は継承されますが、プロトタイプのオブジェクトに格納され、2回目にオブジェクトを作成して、プロトタイプのオブジェクトに格納されている属性を上書きします.