/* 任意の関数に付けられるアドバイス */ function printEnterLeave() { var original = arguments.callee.original; var originalName = arguments.callee.originalName; print("Enter into >>> '" + originalName + "'"); var retVal = original.apply(this, arguments); print("Leave from <<< '" + originalName + "'"); return retVal; } /* samples */ function foo() { bar1(); bar2(); } function bar1() { } function bar2() { baz(); } function baz() { zot(); } function zot() { } /* Point.prototype.moveTo(x, y) に付加する予定のアドバイス */ function moved() { // オマジナイ var original = arguments.callee.original; var originalName = arguments.callee.originalName; // 事前処理 var preX = this.x; var preY = this.y; // もとの関数の呼び出し var retVal = original.apply(this, arguments); // 事後処理 var pre = "(" + preX + ", " + preY + ")"; var post = "(" + this.x + ", " + this.y + ")"; print(pre + "--->" + post); // 移動元と移動先を表示 // 戻り return retVal; } // !! HIYAMA and Rhino only !! if (typeof Point == 'undefined') load("point.js");