だから私はいくつかのJavaScript継承技術をいじり回してきました、そしてこれは私が強力な解決策を導き出そうとしている1つのケースです。
簡単な例を次に示します。http: //jsfiddle.net/JgrYu/
問題:論理的には、2つのdivが両方とも0であると予想されます。ただし、拡張クラスを新しくしただけなので、「c」変数を再生成しません。
これに対する潜在的な修正は、機能継承を使用することです:http: //jsfiddle.net/h8xtz/
function mybase() {
var that = {};
var c = 0;
that.hi = function() {
var ele = $('<div></div>');
ele.html(c++);
$('body').append(ele);
}
return that;
}
function myextended() {
var that = mybase();
that.hi();
return that;
}
myextended.prototype = new mybase();
$(document).ready(function() {
var a = myextended();
var b = myextended();
})
ただし、これに関する問題は、グローバル名前空間が乱雑になり、実際にはプライベート変数の複製が必要な場合に、各オブジェクトが機能プロパティを複製することです。
したがって、私が探しているのは、この問題を解決するための機能継承よりも優れたアプローチです。プライベート変数とパブリック変数/関数を分離する疑似古典的継承構造を作成することを考えましたが、機能継承よりもオーバーヘッドが少ないバージョンを思い付くことができませんでした。