amachang�Υ����Ȥ�������ɵ�
JavaScript: �ؿ������� - ʸ�����ŪIT�Ϥ��ᰥ�����TB��������ɵ�

�񤭴������ɤ�����

IT�ﵭ - JavaScript �δؿ���ְ������Τޤ��֤�����

alert����

alert(hoge);
hoge.method();
���Ԥ��ɤ�����

alert + ���Τޤ��֤���

alert.s(hoge).method(); // 1 ���ơ��ȤΤޤ�

Function���֥������Ȥ��ĥ

�Ȥ����櫓�ǡ��ؿ���trace����method��Function Object���ɲä��Ƥߤ롣

�ޤ��ϼ��㡣

�����Ϥ�����

Function.prototype.trace = function(name, tracer){
    var self = this;
    if (!name)   name   = this.name || '__ANON__';
    if (!tracer) tracer = function(n, a, r){
        alert( n + '(' + a.join(', ') + ') = ' + r);
    };
    return function(){
        var retval;
        try{
            retval = self.apply(this, arguments);
        }catch(e){
            retval = e;
        }
        var a = [];
        for (var i = 0, l = arguments.length; i < l; i++){
            a[i] = arguments[i]
        }
        tracer(name, a, retval);
        return retval;
    }
}

����ʤ鲿�Ǥ�trace�Ǥ��롣�������ؿ�̾��trace�ΰ���������ʤ��Ȥ����ʤ��Ȥ����Τ�����(�������ꡢ̵̾�ؿ��Ǥ�trace�Ǥ���)��

trace()��ؿ��Ȥ��Ƽ���

�ʲ���Function Object���ĥ����ΤǤϤʤ����̾�δؿ��Ȥ���trace()����������㡣

function trace(name, obj, tracer){
    if(!obj) obj = window;
    if(!(name in obj)){
        throw new Error("No '" + name + "' method in object " + obj);
    }
    if (!tracer) tracer = function(n, a, r){
        alert( n + '(' + a.join(', ') + ') = ' + r);
    };
    var orig = obj[name];
    obj[name] = function(){
        var retval;
        try{
            retval = orig.apply(this, arguments);
        }catch(e){
            retval = e;
        }
        var a = [];
        for (var i = 0, l = arguments.length; i < l; i++){
            a[i] = arguments[i]
        }
        tracer(name, a, retval);
        return retval;
    };
}

�Ȥ����ϡ�������

function mul(x,y){ return x * y }
trace('mul');
mul(2, 4);

�����������Ƥ��̤�ؿ�̾��ʸ����Ȥ����Ϥ��Ƥ���Τǡ�̵̾�ؿ��ˤϻȤ��ʤ������쥭������ؿ��ˤ�Ȥ��ˤ������㤨�С��ʲ��ϥ��顼��

(funcition(){
    function mul(x,y){ return x * y }
    trace('mul');
    mul(2, 4);
})();

���������ư����

(funcition(){
    var o = {};
    o.mul = function(x,y){ return x * y };
    trace('mul', o);
    o.mul(2, 4);
})();

�ޤȤ�

DRY����»�ʤ��뤬��Function.prototype.trace()������JavaScript�äݤ��褦�˻פ���

Enjoy!

Dan the JavaScripter

�ɵ�:

Function#name��standard�ǤϤʤ��ȤΤ��ȡ�

Core JavaScript 1.5 Reference:Global Objects:Function - MDC
name: The name of the function (not part of the standard).

����Ǥ⡢�嵭�Τ褦�˽񤭴����Ƥ�safe�ʤΤǤ������ޤ��ޤ�����

��^2��:

JavaScript: �ؿ������� - ʸ�����ŪIT�Ϥ��ᰥ
������Function.prototype.trace�����10���ܤǡ�
retval = self.apply(null, arguments);
�ȡ���äƤ��ޤäƤ���Τǡ����֥������ȤΥ᥽�åɤ�trace���褦�Ȥ���Ȥ��ޤ������ޤ���

�Ȥ����櫓�ǡ�null��this���ѹ����ޤ��������٤Ϥ��ޤ��Ԥ��Ϥ��Ǥ���