をImage
にトラップするようにしようとしていますが、空のハンドラでもエラーメッセージが表示されます。DOMにプロキシオブジェクトを追加できません(トラップはトリガーされません)
TypeError: Argument 1 of Node.appendChild does not implement interface Node.
プロキシオブジェクトは、これは私を少しバッフルので、対象物として機能すると仮定されます。私の知る限り、DOM nodes(?)でこれを行うことができるはずです。また
:私はイメージのロードを開始し、src
プロパティを設定するときonload
ハンドラをトリガすることはできません。
「src」プロパティなどを「引き継ぐ」ようにプロキシを使用する必要があります。そうでなければ、通常のイメージオブジェクトのように動作させますか?おかげで@Harangueする:私のコード
'use strict';
//--- normal image use ---
var imgNormal = new Image();
imgNormal.onload = function(){
console.log('Normal loaded OK');
document.body.appendChild(imgNormal);
};
imgNormal.src = 'https://i.imgur.com/zn7O7QWb.jpg';
//--- proxy image ---
var imgProxy = new Proxy(Image, { // I also tried with 'new Image()' and HTMLImageElement
set: function(a,b,c,d){
console.log('set '+b);
return Reflect.set(a,b,c,d);
}
});
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
document.body.appendChild(imgProxy); // double-up to demo error
更新
! "というプロパティの設定をトラップできません。完全にトラップを無視するように見える - 例:new
"(bah ..)を使用すると、プロキシオブジェクトは確実に生き延びましたが、今度は
var proxy = new Proxy(Image, {
set: function(a,b,c,d){
console.log('set '+b); // doesn't show
return Reflect.set(a,b,c,d);
}
});
var imgProxy = new proxy();
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
どのようにすることができますIトラップ有効なプロキシを使用して、プロパティの設定?一方
アップデート2から新しいプロキシとnew
を使用してはのみ元コンストラクタを使用しているようです。私は見つけることができるすべての例では、は新しいを使用ししません:そのnew myProxy()
の上に、その後使用
var myProxy = new Proxy(.., ..); // should suffer
は、それがトラップを無視するように私が欲しいものではありません、元のコンストラクタを使用しているようです。
var proxy = new Proxy(Image, {}); //should be sufficent??
var proxy2 = new proxy();
console.log(proxy2); //-> says Image (not proxy..)
トラップは私の最初の試みで動作するようですが、期待通りにプロキシが動作しません。これはとても混乱しており、とても新しいです。これらの両方がどのように解決できるか(トラップと挙動)について、どんなインプットにも満足しています。
をチェックする必要が*継承されたクラス
のプロトタイプに動作を変更ええああ、私は確かに新しいキーワードを忘れてしまいました。しかし、私は設定をトラップすることはできません今、新しい問題があります。私はここで別のことを見落としたことがありますか?私はその事例の新しい例で答えを更新しました。ありがとう! – bjanes
OTOH ..例を勉強した後、これがプロキシを使用する一般的な方法であるとは思われません。つまり、新しいProxy(...)で十分であるようです。あなたは "新しい"の必要性について確信していますか?プロキシを経由せずにImageのコンストラクタを使用するように見えます。私は誤解する可能性があります。 :/ – bjanes
@bjanes私はそのコードを使うと、 'src'が設定されるたびにコンソールメッセージを表示します。異なる行動を探していますか? – Harangue