You are adding the event listener in the update
function. Hence every update another event listener is being added. Then they are all being triggered at once, when clicking.
Simply move the event listeners out: http://jsfiddle.net/cgC2z/4/
canvas.addEventListener('mousemove', function (e) {
var mousePos = getMousePos(canvas, e);
position.x = mousePos.x;
position.y = mousePos.y;
}, false);
canvas.addEventListener('mousedown', function (e) {
lazers.push(makeProjectile(position.x + width / 2, position.y - height / 2));
});
function update(elapsed) {
for (var i = 0; i < lazers.length; i++) {
lazers[i].update(elapsed);
}
}