请问这个函数用用来干嘛的?
要怎么测试?
(犀牛书的8.7.3节)弄了两天弄不懂...
function trace(o, m) {
var original = o[m];
o[m] = function() {
console.log(new Date(), "Entering:", m);
var result = original.apply(this, arguments);
console.log(new Date(), "Entering:", m);
return result;
};
}
javascript方法function

解决方案 »

  1.   

    相当于java的反射机制吧,拿到方法,根据提供的对象进行调用。original.apply(this, arguments);original 是方法(函数),this表示当前对象, arguments是方法的实参列表
      

  2.   

    apply与call差不多,作用是改变函数调用者,直白地就是传递一个对象作为函数内的this。
    组件开发中非常有用大致看一下trace函数的作用是在不影响成员函数作用的前提下进行监视,调用时会在控制台输出调用时间
      

  3.   

    用来改变this的var a = 'abc';
    function fn(){
        alert(this.a);
    }
    var b = {
    a:123
    }
    fn();//this默认是指向window
    fn.apply(b);//用apply来改变this,此时fn里面的this其实就b对象。
      

  4.   

    你可以这样测试:
    function trace(o, m) {
    var original = o[m];
    o[m] = function() {
    console.log(new Date(), " [Trace] Entering method:", m, "()");
    var result = original.apply(this, arguments);
    console.log(new Date(), " [Trace] Leaving method:", m, "()");
    return result;
    };
    }foo();
    /* Console displays:
    Fri Mar 15 12:00:00 UTC+0x00 2013 foo is called 
    */trace(window, "foo");
    foo();
    /* Console displays:
     Fri Mar 15 12:00:00 UTC+0x00 2013 [Trace] Entering method:foo() 
     Fri Mar 15 12:00:00 UTC+0x00 2013 foo is called 
     Fri Mar 15 12:00:00 UTC+0x00 2013 [Trace] Leaving method:foo() 
     */
      

  5.   

    4楼的修正版:你可以这样测试:
    function trace(o, m) {
    var original = o[m];
    o[m] = function() {
    console.log(new Date(), " [Trace] Entering method:", m, "()");
    var result = original.apply(this, arguments);
    console.log(new Date(), " [Trace] Leaving method:", m, "()");
    return result;
    };
    }// Define a method foo()
    function foo() {
    console.log(new Date(), " foo is called");
    }// Test foo() without trace
    foo();
    /* Console displays:
    Fri Mar 15 12:00:00 UTC+0x00 2013 foo is called 
    */// Test foo() with trace. (注意;foo 是 window 的一个函数)
    trace(window, "foo");
    foo();
    /* Console displays:
     Fri Mar 15 12:00:00 UTC+0x00 2013 [Trace] Entering method:foo() 
     Fri Mar 15 12:00:00 UTC+0x00 2013 foo is called 
     Fri Mar 15 12:00:00 UTC+0x00 2013 [Trace] Leaving method:foo() 
     */
      

  6.   

    非常感谢,我终于明白这个函数(trace())的作用和用法了。^^