いくつかの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"]}
一つ重要な注意ことは、私は、オブジェクトがjsdomライブラリで実装されてNode.jsのとdocument
を使用していますということです。これまでは、前述のDOM関数の動作を変更するためにES6プロキシを利用しようとしました。
これは、私がどのようにしてプロキシしようとしたかです。文書すべてのメソッド呼び出しをトラップするオブジェクトです。私はこの技術を使用しているかどうか、または他の何かを使って私の問題を解決することができるのだろうかと思います。
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