Anbringen von Funktionen auf eine Instanz eines Elements
Können wir ändern ein DOM-element und fügen Sie zu Ihrem Prototyp. Zum Beispiel, wenn wir hinzufügen möchten, etwas, das nur auf die Leinwand, wir würden etwas wie das hier tun:
HTMLCanvasElement.prototype.doSomething = function(arg) { ... };
Können wir dann führen Sie diese Aktion auf ein canvas-element:
var canvas = document.getElementById('canvasId');
canvas.doSomething(...);
Ist es möglich, hinzufügen/anfügen Funktion in dieser Instanz des canvas ohne Veränderung der Prototyp HTMLCanvasElement. Ich will nur eine Leinwand, wo doSomething(...) aufgerufen wurde, um Zugang zu den zusätzlichen Methoden, nicht alle canvas-Elemente in den DOM. Wie kann ich dies tun?
Ich habe versucht, die folgenden in meinem doSomething-Funktion:
this.prototype.foobar = function() {...}
Allerdings Prototyp ist nicht definiert hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Shusl hat mir geholfen, kommen mit der richtigen Antwort. Es war einfacher als ich dachte. In meinem doSomething(args) - Funktion, anstatt zu versuchen, ändern Sie die Objekt-Prototyp, den ich einfach direkt an die Funktion. Hier ist der vollständige code:
Nun, foobar ist nur zugänglich, zum Beispiel der Leinwand, wo doSomething aufgerufen wurde. Zur gleichen Zeit, ich don ' T haben keine Informationen über die Instanz.
this.foobar
bereits vorhanden ist, bevor Sie es. So, jedes mal, wenn Sie rufendoSomething
es nicht re-setthis.foobar
..extend
Methode: PrototypElement.extend
,jQuery.extend
(John Resig Artikel), YUI, Backbone.js, etc.In diesem Fall können Sie direkt attache eine
method
zu Ihrer canvas-ObjektMit jQuery, können Sie die
data
Eigenschaft.JSFiddle
Object.defineProperty(element, 'doSomething', {value:function(arg){ ... }} );
Wo 'element' ist das element, das Sie möchten, fügen Sie die Eigenschaft zu,
'doSomething' ist der name und die
Dritte argument ist ein Objekt mit der Eigenschaft seiner selbst. In deinem Fall eine Funktion.
Beispiel:
JS:
Den 'configurable' - Eigenschaft gibt an, ob Sie möchte, dass die 'doSomething' - Eigenschaft, um in der Lage sein, wieder zu ändern, nachdem es erstellt wurde. Überprüfen Sie heraus die MDN Details für weitere Informationen und Beispiele.