考慮以下代碼:每當我叫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