Las funciones de javascript y los objetos que utilizan la palabra clave 'this' no funcionan.

mi pregunta aquí es acerca de las funciones y objetos en javascript. Tengo tres preguntas que se derivan de una a otra. En el siguiente ejemplo, trato de acceder al valor de 'a' en la prueba, pero me queda indefinido. pero creo un nuevo objeto de prueba, luego puedo acceder al valor 'a' y cambiarlo.

//create a function called test
         var test=function() {
           this.a=2
           this.b=3 };
           test.a//undefined
//create a object called test1 using 'new'
test1 = new test();
test1.a//2
//change the value of a in test1
test1.a=4
test1 //Object { a=4, b=3}

Mientras trataba de descubrir por qué sucede esto, me encontré con estoLas funciones de javascript son objetos? y otra pregunta salió de esto. La solución aceptada para esa pregunta de SO está abajo.

var addn = function func(a) {
  return func.n + a;
};

addn['n'] = 3;
addn(3);

Cambié la 'func.n' a 'this' y ya no funciona

var addn=function func(a) {
 return this.n+a;
};
addn['n']=3;
addn(3); //NaN

Hacer una función anónima con 'esto' tampoco ayudó

    //anonymous function
var addn=function(a) {
     return this.n+a;
    };
    addn['n']=3;
addn(3); //NaN

¿Por qué usar 'esto' no funcionó?

una pregunta final, ¿cuál es la diferencia en el uso de la palabra clave 'new' y 'createObject'. Douglas Crokford sugiere usar 'CreateObject' en su libro, pero no entiendo por qué. Gracias a todos por sus comentarios.

Respuestas a la pregunta(2)

Su respuesta a la pregunta