diesen Code vor:Proxies mit einfachen Arrays
app.mediaLibrary = new function MediaLibrary() {
var self = this;
self.media = new Proxy([], {
set(target, key, value) {
console.log(`Setting value ${key} as ${value}`)
if (!(value instanceof self.Media))
throw new Error(`${value} is not instance of Media.`)
target[key] = value;
return true
},
get (target, key) {
console.log(`Getting value ${key} as ${target[key]}`)
return target[key]
}
});
self.Media = function Media(file, fileReader) {
this.src = fileReader.result;
this.file = file;
}
return self;
}
Immer, wenn ich app.mediaLibrary.media.push(new app.mediaLibrary.Media("", ""))
In Konsole nennen sehe ich das:
Getting value push as function push() { [native code] }
Getting value length as 0
Setting value 0 as [object Object]
Setting value length as 1
Uncaught Error: 1 is not instance of Media.(…)
Ich verstehe, warum ich das sehen, aber wie kann ich um ihn codieren ? Es scheint, dass meine Traps durch interne (push
, length
) sowie externe Anrufe ([0]=...
) ausgelöst werden und ich nicht weiß, wie man zwischen ihnen unterscheidet. Irgendwelche Ideen?
Ich verstehe Ihr Differenzierungsschema nicht. Wenn ein Anruf als "extern" betrachtet werden kann, ist es definitiv "Push". Es ruft wiederum '' get length'' und '' set0'' auf. Was genau qualifiziert den Zugang einer Eigenschaft als intern? – zeroflagL
Ich habe nicht get Länge in meinem Code, so ist es interne/implizite Aufruf, nicht extern/explizit. –
Nach dieser Definition würde jede Bibliothek in der Welt nur aus internen Aufrufen bestehen. Auch wenn jemand Ihren Code in einem Rückruf anruft. Das macht nicht viel Sinn. – zeroflagL