apply()步骤的疑问

apply()方法的疑问
请问这个函数用用来干嘛的?
要怎么测试?
(犀牛书的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

------解决方案--------------------
apply与call差不多,作用是改变函数调用者,直白地就是传递一个对象作为函数内的this。
组件开发中非常有用

大致看一下trace函数的作用是在不影响成员函数作用的前提下进行监视,调用时会在控制台输出调用时间
------解决方案--------------------
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() 
 */