El método más moderno para obtener la posición del mouse dentro de un lienzo en JavaScript nativo

Primero, sé que esta pregunta ha sido formulada muchas veces. Sin embargo, las respuestas proporcionadas no son coherentes y se utilizan diversos métodos para obtener la posición del mouse. Algunos ejemplos:

Método 1:

canvas.onmousemove = function (event) { // this  object refers to canvas object  
Mouse = {
    x: event.pageX - this.offsetLeft,
    y: event.pageY - this.offsetTop
}
}

Método 2:

function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
  x: evt.clientX - rect.left,
  y: evt.clientY - rect.top
};
}

Método 3:

var findPos = function(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) { 
    do {
       curleft += obj.offsetLeft;
       curtop += obj.offsetTop; 
    } while (obj = obj.offsetParent);
}
return { x : curleft, y : curtop };
};

Método 4:

var x;
var y;
if (e.pageX || e.pageY)
{
    x = e.pageX;
    y = e.pageY;
}
else {
    x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
    y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; 
} 
x -= gCanvasElement.offsetLeft;
y -= gCanvasElement.offsetTop;

y así.

Lo que tengo curiosidad es qué método es el más moderno en términos de compatibilidad con el navegador y la comodidad para obtener la posición del mouse en un lienzo. ¿O es ese tipo de cosas que tienen un impacto marginal y cualquiera de las anteriores es una buena opción? (Sí, me doy cuenta de que los códigos anteriores no son exactamente iguales)