継承
thatに親クラスを代入することで継承をおこなう。var Animal = function (name) { //親クラス
var _name = name;
var that = {};
that.getName = function () {
return _name;
};
return that;
};
var Cat = function (name) { //子クラス
var _name = name;
var that = Animal(_name);
return that;
};
//メソッドgetNameは子クラスで定義しなくても
//親クラスから継承されている
var cat = Cat("Liz");
var name = cat.getName(); //name => "Liz"
オーバーライド
メソッドはオーバーライド(上書き)することもできる。var Animal = function (name) { //親クラス
var _name = name;
var that = {};
that.getName = function () {
return _name;
};
that.say = function () {
return "Hello! My name is " + _name + "!";
};
return that;
};
var Cat = function (name) { //子クラス
var _name = name;
var that = Animal(_name);
that.say = function () { //オーバーライド
return "Hello! My name is " + _name + "! I'm cat!!";
};
return that;
};
var cat = Cat("Liz");
var word = cat.say(); //word => "Hello! My name is Liz! I'm cat!!"
オーバーライドされても継承元(親クラス)のメソッドを呼び出すことも可能。そのためにはまず以下の準備をしておく。
//第一引数の名前のメソッドを拡張する
//すべての関数で利用できる
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
//継承元のメソッドを呼び出すメソッドを拡張
Object.method('superior', function (name) {
var that = this, method = that[name];
return function () {
return method.apply(that, arguments);
};
});
よりクールに書き換えられる。
var Cat = function (name) { //子クラス
var _name = name, that = Animal(_name);
//あらかじめ継承元のメソッドをセットしておく
var superSay = that.superior('say');
that.say = function () { //オーバーライド
return superSay() + "! I'm cat!!";
};
return that;
};
var cat = Cat("Liz");
var word = cat.say(); //word => "Hello! My name is Liz! I'm cat!!"
Douglas Crockford
オライリージャパン
売り上げランキング: 5275
オライリージャパン
売り上げランキング: 5275

0 件のコメント:
コメントを投稿