一部のノードが親から削除される前にアラートを表示するために、removeChild などの標準 DOM 関数を置き換えることはできますか? そのようなものですが、私の例にはエラーがあります
var original = node.removeChild;
node.removeChild = function(node, original){
alert('message');
original(node);
}
一部のノードが親から削除される前にアラートを表示するために、removeChild などの標準 DOM 関数を置き換えることはできますか? そのようなものですが、私の例にはエラーがあります
var original = node.removeChild;
node.removeChild = function(node, original){
alert('message');
original(node);
}
私は急進的になり、ノーと言います。気になるブラウザーで技術的には機能し、prototype.js の基礎となる場合もありますが、このように DOM オブジェクトやそのプロトタイプを変更することは絶対にしないでください。
このトピックに関する長い投稿があります: http://perfectionkills.com/whats-wrong-with-extending-the-dom/しかし、TL;DR は、これらは「ホストされたオブジェクト」であり、その動作の変更は保証されていないということです。 . 今日はブラウザ x で動作する可能性がありますが、ブラウザ y や明日の x については保証されません。
まず、new
キーワードの使い方が完全に間違っています。それによって行動が大きく変わります。すべての JavaScript 関数の「母体」でfunction
ある のインスタンスです。Function
キーワードを使用するnew
と、関数はすぐに実行され、動作は予想とは大きく異なります。関数オブジェクトの作成方法の詳細については、ECMA 言語仕様のセクション 13を参照してください。こちらの 98 ページをお読みください。
次に、ネイティブ オブジェクトを変更しないことを強くお勧めしますprototype
。それは、人類の歴史の中で最も退屈で痛みを伴うバグにつながります. コードを編集するためにあなたの後にやってくる人は、そのアラートの発信元を突き止めるまでに長い時間を費やします。
これら 2 つのアクションは別々にしてください。これらはまったく無関係です。それらを関数にラップすることはprototype
、上記の理由により、非常に悪い設計です。たとえば、次のようになります。
for in
ループの使用。を使用するのを忘れた場合に必要な、より多くのプロパティを反復処理しますhasOwnProperty
。