Esta es una pregunta para el gurú de JavaScript. Estoy tratando de trabajar con el modelo de prototipo de JavaScript más elegante. Aquí está mi código de utilidad (que proporciona la cadena real de prototipos y el trabajo correcto con el operador instanceof):¿Cómo hago JavaScript Prototype Herencia (cadena de prototipos)
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;
};
Se me permite hacer este tipo de 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
Mi pregunta es: ¿hay forma más simple de hacer esto?
http://codereview.stackexchange.com/ –
Hay un muy buen ejemplo de herencia de clases por [John Resig] (http://ejohn.org/blog/simple-javascript-inheritance/). Proporciona súper y otras golosinas. – elclanrs
Esto puede ser de interés: http://ejohn.org/apps/learn/ –