¿Dónde está mi 'esto'? Usando el método de los objetos como una función de devolución de llamada

Tengo una pregunta genérica sobre la especificación de javascript o la implementación del puntero de funciones (¿delegados?) Que son puntos a métodos de objetos.

Por favor, lea el siguiente fragmento de código. Aquí tenemos un objeto con un método que usa 'esto' para acceder a un campo de objeto. Cuando llamamos a este método como de costumbre (o.method();), devuelve el valor del campo especificado del objeto. Pero cuando creamos un puntero a este método (devolución de llamada) y lo invocamos, devuelve un valor indefinido, porque 'este' dentro del alcance del método ahora es un objeto global.

var o = {
    field : 'value', 
    method : function() {
        return this.field;
    }
};

o.method(); // returns 'value'

var callback = o.method;

callback(); // returns 'undefined' cause 'this' is global object

Entonces, ¿dónde está mi 'esto'?

Respuestas a la pregunta(3)

Su respuesta a la pregunta