JavaScriptを使って対象に登録モニターを修正します.
3384 ワード
もっと読む
私たちは大きなフロントエンドプロジェクトを開発する時、ある変数にフィールドがあります.どのプログラムがこの変数のフィールドを変更したかを知りたいです.例えばグローバル変数windowで新しいフィールドをカスタマイズしました.name、どのようなプログラムがこのフィールドに値を与えているのかを知りたいです.
一行でデバッグするのは時間がかかりすぎます.windowという変数があればnameフィールドがプログラムによって価値が与えられた時、私達自身が実現したモニターを実行することができます.これは便利ではないですか?
モニターの実現は簡単です.
三つ目のパラメータは対象で、属性はsetです.つまり、私達はwindowを監督したいという意味です.nameが割り当てられたこの事件.属性セットの値はJavaScript関数です.つまり、私たち自身が定義したモニターです.このモニターはwindowになります.nameは他のJavaScript関数によって修正されたらトリガされます.
テストしてください.ブラウザで上記のコードを実行して、ブレークポイントが私達の期待によって触発されました.
コールスタックからも確かにwindow.uであることが分かります.name="2"行のコードがトリガするブレークポイントは、私たち自身が登録した属性修正モニターが作動しました.
もっとJerryのオリジナル技術記事を取得するには、公衆番号の「汪子煕」または次の二次元コードをスキャンしてください.
私たちは大きなフロントエンドプロジェクトを開発する時、ある変数にフィールドがあります.どのプログラムがこの変数のフィールドを変更したかを知りたいです.例えばグローバル変数windowで新しいフィールドをカスタマイズしました.name、どのようなプログラムがこのフィールドに値を与えているのかを知りたいです.
一行でデバッグするのは時間がかかりすぎます.windowという変数があればnameフィールドがプログラムによって価値が与えられた時、私達自身が実現したモニターを実行することができます.これは便利ではないですか?
モニターの実現は簡単です.
<script>
"use strict";
function test(){
Object.defineProperty(window, "_name", {
get : function(){ console.log("gett is called ") },
set : function(newValue){
debugger;
console.log("_name is filled!!!!");
},
enumerable : true,
configurable : true
});
for( var i = 0; i < 2; i++)
console.log(i);
window._name = "2";
};
test();
script>
Objectオブジェクトが持つメソッドdefinePropertyを使用して、最初のパラメータは盗聴対象のwindowで、二つ目のパラメータは盗聴対象のフィールド名です.name三つ目のパラメータは対象で、属性はsetです.つまり、私達はwindowを監督したいという意味です.nameが割り当てられたこの事件.属性セットの値はJavaScript関数です.つまり、私たち自身が定義したモニターです.このモニターはwindowになります.nameは他のJavaScript関数によって修正されたらトリガされます.
テストしてください.ブラウザで上記のコードを実行して、ブレークポイントが私達の期待によって触発されました.
コールスタックからも確かにwindow.uであることが分かります.name="2"行のコードがトリガするブレークポイントは、私たち自身が登録した属性修正モニターが作動しました.
もっとJerryのオリジナル技術記事を取得するには、公衆番号の「汪子煕」または次の二次元コードをスキャンしてください.