これはJavaScriptの達人にとっての質問です。私はJavaScriptプロトタイプモデルでより洗練された作業をしようとしています。ここに私のユーティリティコードは(それはプロトタイプとのinstanceof演算子で正しい仕事の本当のチェーンを提供します)です:JavaScriptプロトタイプ継承(プロトタイプのチェーン)
function Class(conf) {
var init = conf.init || function() {};
delete conf.init;
var parent = conf.parent || function() {};
delete conf.parent;
var F = function() {};
F.prototype = parent.prototype;
var f = new F();
for (var fn in conf) f[fn] = conf[fn];
init.prototype = f;
return init;
};
それは私がこのようなthignsを行うことができます:
var Class_1 = new Class({
init: function (msg) { // constructor
this.msg = msg;
},
method_1: function() {
alert(this.msg + ' in Class_1::method_1');
},
method_2: function() {
alert(this.msg + ' in Class_1::method_2');
}
});
var Class_2 = new Class({
parent: Class_1,
init: function (msg) { // constructor
this.msg = msg;
},
// method_1 will be taken from Class_1
method_2: function() { // this method will overwrite the original one
alert(this.msg + ' in Class_2::method_2');
},
method_3: function() { // just new method
alert(this.msg + ' in Class_2::method_3');
}
});
var c1 = new Class_1('msg');
c1.method_1(); // msg in Class_1::method_1
c1.method_2(); // msg in Class_1::method_2
var c2 = new Class_2('msg');
c2.method_1(); // msg in Class_1::method_1
c2.method_2(); // msg in Class_2::method_2
c2.method_3(); // msg in Class_2::method_3
alert('c1 < Class_1 - ' + (c1 instanceof Class_1 ? 'true' : 'false')); // true
alert('c1 < Class_2 - ' + (c1 instanceof Class_2 ? 'true' : 'false')); // false
alert('c2 < Class_1 - ' + (c2 instanceof Class_1 ? 'true' : 'false')); // true
alert('c2 < Class_2 - ' + (c2 instanceof Class_2 ? 'true' : 'false')); // true
私の質問がある:ありこれを行うより簡単な方法?
http://codereview.stackexchange.com/ –
[John Resig](http://ejohn.org/blog/simple-javascript-inheritance/)のクラス継承の非常に良い例があります。これはスーパーやその他のグッズを提供します。 – elclanrs
これは興味深いかもしれません:http://ejohn.org/apps/learn/ –