Ich versuche, eine von Image
zum Trap-Eigenschaften, aber auch mit einem leeren Handler bekomme ich eine Fehlermeldung.Proxy-Objekt kann nicht zu DOM hinzugefügt werden (Traps triggert auch nicht)
Das Proxy-Objekt soll als das Zielobjekt fungieren, so dass dies mich ein wenig verwirrt. Soweit ich weiß, sollten Sie dies auch mit DOM nodes (?) Tun können.
Auch: Ich kann nicht gestartet werden, das Bild zu laden und haben die onload
Handler ausgelöst, wenn die src
Eigenschaft festlegen.
Wie sollte ich den Proxy verwenden, damit ich zum Beispiel die "src" -Eigenschaft übernehmen kann und sie sich sonst wie ein normales Bildobjekt verhält?
Mein Code
'use strict';
//--- normal image use ---
var imgNormal = new Image();
imgNormal.onload = function(){
console.log('Normal loaded OK');
document.body.appendChild(imgNormal);
};
imgNormal.src = 'https://i.imgur.com/zn7O7QWb.jpg';
//--- proxy image ---
var imgProxy = new Proxy(Image, { // I also tried with 'new Image()' and HTMLImageElement
set: function(a,b,c,d){
console.log('set '+b);
return Reflect.set(a,b,c,d);
}
});
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
document.body.appendChild(imgProxy); // double-up to demo error
aktualisieren: Dank @Harangue! mit " jetzt kann ich nicht die Einstellung von Eigenschaften abfangen. Es scheinen die Falle vollständig zu ignorieren - Beispiel:new
" (bah ..) sicherlich das Proxy-Objekt zum Leben erweckt, aber
var proxy = new Proxy(Image, {
set: function(a,b,c,d){
console.log('set '+b); // doesn't show
return Reflect.set(a,b,c,d);
}
});
var imgProxy = new proxy();
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
Wie kann ich Falle der Einstellung der Eigenschaft einen gültigen Proxy verwenden?
Update 2 Auf der anderen Seite - new
mit den neuen Proxy nur das ursprüngliche Konstruktor zu verwenden scheinen. Alle Beispiele, die ich finden kann, tut nicht neue Verwendung:
var myProxy = new Proxy(.., ..); // should suffer
Mit dann oben auf dieser new myProxy()
scheinen nur den ursprünglichen Konstruktor zu verwenden, das ist nicht, was ich will, wie es die Fallen ignoriert.
var proxy = new Proxy(Image, {}); //should be sufficent??
var proxy2 = new proxy();
console.log(proxy2); //-> says Image (not proxy..)
Die Fallen scheint in meinen ersten Versuchen zu arbeiten, aber der Proxy nicht wie erwartet verhalten. Das ist so verwirrend und so neu. Ich freue mich über jede Eingabe, wie beides gelöst werden kann (Fallen und Verhalten).
Ah ja zu überprüfen, ich habe in der Tat vergessen, das neue Schlüsselwort. ABER, es gibt jetzt ein neues Problem, da ich die Einstellung nicht abfangen kann. Habe ich hier noch etwas übersehen? Ich aktualisierte die Antwort mit einem neuen Beispiel für diesen Fall. Vielen Dank! – bjanes
OTOH .. nach dem Studium der Beispiele scheint es nicht, dass dies der übliche Weg ist, einen Proxy zu verwenden. Ich meine, es scheint, dass ein neuer Proxy (...) ausreichen sollte. Sind Sie sicher, dass Sie "neu" brauchen? Es scheint nur den Konstruktor des Bildes zu verwenden, ohne den Proxy zu durchlaufen. aber ich könnte es falsch verstehen. :/ – bjanes
@bjanes Wenn ich diesen Code verwende, erhalte ich immer eine Konsolenmeldung, wenn 'src' gesetzt ist. Suchst du nach einem anderen Verhalten? – Harangue