我需要攔截對某些DOM API函數的調用並將其參數存儲爲副作用。例如,假設我對函數getElementsByTagName
和getElementById
感興趣。見下面的例子:攔截調用DOM API函數
"use strict";
const jsdom = require("jsdom");
let document = jsdom.jsdom("<html><head></head><body><div id='foo'><div></div></div></body></html>");
let cpool = {ids: [], tags: []};
let obj = document.getElementById("foo");
// --> cpool = {ids: ["foo"], tags: []}
obj.getElementsByTagName("div");
// --> cpool = {ids: ["foo"], tags: ["div"]}
一個重要的注意的是,我使用Node.js的和對象document
由jsdom庫實現。到目前爲止,我試圖利用ES6代理修改上述DOM函數的行爲。
這就是我試圖通過代理文檔對象來捕獲所有方法調用。我想知道是否以及如何使用這種技術或其他方法,我可以解決我的問題。
let documentProxy = new Proxy(document, {
get(target, propKey, receiver) {
return function (...args) {
Reflect.apply(target, propKey, args);
console.log(propKey + JSON.stringify(args));
return result;
};
}
});
documentProxy.getElementById("foo");
// --> getElementById["foo"]
我不知道爲什麼,但它聽起來就像你做了壞事... – evolutionxbox
@evolutionxbox什麼叫'壞thing'是什麼意思? –
你試圖通過攔截這些調用來解決什麼是你的[實際問題](http://meta.stackexchange.com/q/66377)? – Bergi