Это пример из JavaScript: Полное руководство Дэвида Фланагана.
//Replace the method named m of the object o with a version that logs messages before and after invoking the original method.
function trace(o, m) {
var original = o[m]; // Remember original method in the closure.
o[m] = function() { // Now define the new method.
console.log(new Date(), "Entering:", m); // Log message.
var result = original.apply(this, arguments); // Invoke original.
console.log(new Date(), "Exiting:", m); // Log message.
return result; // Return result.
};
}
Я понимаю, что, поскольку m является методом o, «это» должно относиться к объекту o. Но я не могу понять как; потому что в функции "это" должно ссылаться на глобальный объект (нестрогий режим).
Кроме того, как массив "аргументов" содержит аргументы исходной функции, а не аргументы анонимной функции-оболочки?
this
зависит от того, как вызывается функция, и вы не показываете нам, как вы вызываетеo[m]
. Утверждение в функции 'this' должно ссылаться на глобальный объект (нестрогий режим) верно только иногда (поскольку значение зависит от того, как оно вызывается, и оно может вызываться или не вызываться в контексте глобального объекта). - person Quentin   schedule 15.11.2014this
на самом деле не имеет значения. Он просто передается исходному методу, так что он будет вызываться в том же контексте, что и функция-оболочка. - person Guffa   schedule 19.11.2014