ある種の古典的な継承を JavaScript に強制しようとする人々のやり方には、いつも驚かされます。オブジェクト b からオブジェクト a にプロトタイプ メソッドを追加せずに、あるオブジェクト b でオブジェクト a からプロトタイプ メソッドを継承するメソッドと、1から継承されたオブジェクトからプライベート変数を使用する可能性を設計しました。さて、私は興味があります: これは本当にプロトタイプの「継承」だと思いますか? それは実行可能な方法ですか?それに落とし穴はありますか?
コード例を次に示します。
Object.prototype.inheritsFrom = function(obj){
var prototo = this.prototype,
protofrom = obj.prototype;
for (var l in protofrom) {
if (protofrom.hasOwnProperty(l)){
prototo[l] = protofrom[l];
}
}
}
function Obj1(){
var const1 = 25;
if (!Obj1.prototype.getConst1){
Obj1.prototype.getConst1 = function(){
return const1;
}
}
}
function Obj2(){
var const2 = 50;
if (!Obj2.prototype.getConst2){
Obj2.prototype.getConst2 = function(){
return const2;
}
}
Obj2.inheritsFrom(Obj1);
}
var instanceA = new Obj1,
instanceB = new Obj2;
この jsfiddleでわかるように、今instanceA
は methodgetConst1
がinstanceB
含まれており、メソッドgetConst1
とが含まれています。getConst2
1コンストラクター関数にプロトタイプ メソッドを割り当てることにより、それによって作成されたクロージャーを効果的に使用します。