0

次のコードを検討してください。

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;
}

app.mediaLibrary.media.push(new app.mediaLibrary.Media("", "")) コンソールで呼び出すたびに、次のように表示されます。

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.(…)

これが表示される理由は理解できますが、どのようにコーディングすればよいでしょうか? 私のトラップは internal( push, length) と external calls( [0]=...) によってトリガーされているようで、それらを区別する方法がわかりません。何か案は?

4

1 に答える 1