考虑以下代码:每当我叫app.mediaLibrary.media.push(new app.mediaLibrary.Media("", ""))
在控制台使用代理与普通阵列
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;
}
我看到这一点:
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.(…)
我明白为什么我看到这一点,但我怎么能围绕它的代码?看来我的陷阱是由内部触发的(push
,length
)以及外部电话([0]=...
),我不知道如何区分它们。有任何想法吗?
我不明白你的差异化方案。如果一个电话可以被视为“外部”,那么它肯定是“推”。它依次调用“get length”和“set 0”。那么,什么样的资产可以作为内部资源? – zeroflagL
我没有在我的代码中调用get length,所以它是内部/隐式调用,而不是外部/显式。 –
根据这个定义,世界上每个图书馆都只包含内部电话。即使有人在回拨中调用您的代码。这没有什么意义。 – zeroflagL