オブジェクトを観察していて、値を変更したときに関数を呼び出す必要があります。プロキシオブジェクト(Javascript ECMAscript)で外部関数を呼び出す
私はObject.observeでそれを行うことができ、Proxyで簡素化しようとします。
私は外部関数を呼び出すことができません、それは未定義と言う原因になります。 外部関数をトラップする方法は?
機能doStmgを(答えるためにフォローアップとして編集
const page = {}
const pageHandler = {
externalFunction : externalFunction, // does not work: gets undefined
doSmtg : function(value) {
// do something on a value
externalFunction(value) // externalFunction is undefined
this.externalFunction(value) // same problem
},
set(target, key, value) {
if (key == 'article') {
this.doSmtg(value);
}
}
}
const proxyPage = new Proxy(page , pageHandler);
function externalFunction(myObject) {
// do things on my Object
// this function can be called somewhere else then proxy Page
}
)と呼ばれ、まだexternalFunction
を除き、それに//Stuff
を実行している:ここ
は私のものです未定義。 externalFunction
は他の場所では通常呼び出されます。 OPの特定の例として
const page = {
// observePage : observePage
}
const pageHandler = {
// observePage : observePage,
set : setPageProperty,
get(target, key) {
console.log('Getting page', target[key]);
return target[key]
}
};
const proxyPage = new Proxy(page , pageHandler);
function setPageProperty(target, key, value) {
target[key] = value;
if (key == 'article') {
doSmtg(value);
}
}
function doSmtg(article) {
// stuff
$("a[href*='/url/']").click(function(e){
param = {
titles : l
};
externalFunction(param, pageCallback, setOpenFromGraph(false));
});
}
function externalFunction(param, firstCallback, secondCallback) {
// stuff
}
プロキシは、 'ハンドラ' と 'ターゲット' は異なっていました。プロキシのターゲットは 'page'で、ハンドラ 'pageHandler'はターゲットにexternalFunctionが含まれていないため、未定義です。あなたは外部関数をページにプロパティ –
として移動する必要があります。どちらのシナリオでも私のために働きます – MinusFour
ありがとう皆さんありがとうございます。 @ftor @Shyam Babuあなたは例を教えていただけますか?私はconst 'page = {externalFunction:externalFunction}'を試してから 'doSmtg()'の 'page.externalFunction'または' target.externalFunction'として呼び出しましたが動作しませんでした。 – user305883