我需要拦截对某些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