Wie die Umsetzung Mehrfachvererbung mit Hilfe von jQuery erweitern
Nach Douglas Crockford konnte ich so etwas wie http://javascript.crockford.com/prototypal.html (mit ein wenig Feintuning)... aber ich interessiere mich für jQuery Weg, es zu tun. Ist es gute Praxis mit $.verlängern ?
Habe ich 4 Klassen :
var A = function(){ }
A.prototype = {
name : "A",
cl : function(){
alert(this.name);
}
}
var D = function(){}
D.prototype = {
say : function(){
alert("D");
}
}
var B = function(){} //inherits from A
B.prototype = $.extend(new A(), {
name : "B"
});
var C = function(){} //inherits from B and D
C.prototype = $.extend(new B(), new D(), {
name : "C"
});
var o = new C();
alert((o instanceof B) && (o instanceof A) && (o instanceof C)); //is instance of A, B and C
alert(o instanceof D); //but is not instance of D
So, ich kann jede Methode, Eigenschaft, ... aus A, B, C und D. Problem kommt, wenn ich will, um zu testen, ob o ist Instanz von D? Wie kann ich dieses problem lösen?
- Nur eine Notiz, in der Praxis, in der eine Ente typisierte Sprache, die Sie nur selten darum kümmern, wenn ein Objekt instanceof etwas. Warum sind Sie der überprüfung instanceof-D? Beachten Sie, dass in der Regel, was Sie wirklich brauchen, sind en.wikipedia.org/wiki/Mixin
- Mehrfache Vererbung funktioniert nicht mit
instanceof
, da Objekte nur als Prototyp eine lineare Kette.
Du musst angemeldet sein, um einen Kommentar abzugeben.
$.extend
ist nützlich für singletons, aber für Prototypen ist nicht ideal.Mit
Object.create
(oder Crockford ' s polyfill), können Sie einfach erstellen Sie Klassen wie diese. Ich bin mit$.extend
einfach zu verarbeiten Eigenschaften und geben Sie Standardwerte und das Modul-Muster zu halten, gut organisiert. Hoffe, das hilft:Ist ein Objekt nur ein Prototyp, so dass Sie es nicht schaffen, ein Beispiel für zwei andere Arten mit einem Anruf.
$.extend(new B(), new D(), ...
erstellt ein Objekt, das eine Instanz von B. Dann werden alle Eigenschaften von D kopiert werden, um das neu erstellte Objekt. Aber das Objekt ist immer noch eine Instanz von B.Mit
$.extend
ist weder gut noch schlecht per se. Aber sind Sie verpflichtet, jQuery, das macht den code weniger Mehrweg. Und Sie müssen sich der Tatsache bewusst sein, dass$.extend
überschreibt Eigenschaften mit dem gleichen Namen, die möglicherweise oder möglicherweise nicht, was Sie wollen.$.extend
tut. Der Unterschied ist, dass dieser code erstellt einen neuen Typ.