¿este objeto de javascript se refiere a objetos recién creados de la manera en que pienso

Entonces, cuando creamos la función constructora para crear un nuevo objeto, la nueva palabra clave hace 3 cosas que voy a explicar, pero por favor corrígeme si me equivoco, quiero estar seguro de que estoy en lo cierto.

primero crearé una función constructora

function ObjectCreate(){ this.a = "a"; this.b = "b"; ObjectCreate.prototype.show = function(){ alert(this.a+" "+this.b); } } obj1 = new ObjectCreate(); 

ahora lo primero que hace una nueva palabra clave es crear un nuevo objeto y establecer su enlace secreto al prototipo de su constructor y pasarlo a la función de constructor donde ahora this puede referirse a él y tenga en cuenta que this no se refiere a obj1 en este punto porque una vez constructor terminó de crear el objeto solo luego devuelve el objeto recién creado a la variable obj1. Hago esta pregunta porque algunas personas dicen que this refiere al objeto obj1 en este caso. así que estoy aquí.

En este ejemplo, durante la invocación del constructor, obj1 no está definido. El valor se asigna a la variable ObjectCreate después de que la función ObjectCreate regrese.

Usted puede verificarse a sí mismo:

 function ObjectCreate(){ this.a = "a"; this.b = "b"; alert(obj1); // yields "undefined" ObjectCreate.prototype.show = function(){ alert(this.a+" "+this.b); } } var obj1 = new ObjectCreate(); // note "var" 

Su fraseo es un poco confuso, pero haré mi mejor esfuerzo. En primer lugar, debe tener en cuenta que sus llaves están un poco apagados. Tu código debería verse así:

 function ObjectCreate(){ this.a = "a"; this.b = "b"; } ObjectCreate.prototype.show = function(){ alert(this.a+" "+this.b); } obj1 = new ObjectCreate(); 

Debes definir tu constructor y luego adjuntar cosas a su prototipo.

Cuando llamas al constructor, this palabra clave básicamente se refiere al nuevo objeto que se está creando. Esto es importante porque, por ejemplo, podrías escribir un constructor como:

 function ObjectCreate(x,y){ this.a = x*x; this.b = y*x+4; } obj1 = new ObjectCreate(10,20); 

Aquí, como en todos los constructores, this refiere a la instancia que se está creando ( obj1 , en este caso).

Creo que sugirió que this refiere al prototipo del objeto, pero eso haría que las variables estáticas this.a y this.b , que serían inútiles en un constructor como el aquí, ya que cada vez que inicializaba un nuevo objeto, cambiaría el vale de this.a y this.b para todos los objetos previamente existentes, y eso simplemente no es útil.

Espero que eso haya respondido tu pregunta. De lo contrario, siga adelante y deje comentarios para obtener más aclaraciones.

Parece que nadie mencionó que this refiere al invoking object .

 window.sayHi=function(){ console.log(this.name); } window.name="Window" window.sayHi();//=Window var obj={ name:"obj" } obj.fn=window.sayHi; obj.fn();//=obj 

El código anterior muestra que al pasar funciones alrededor de this contexto cambiará. Si no quiere eso, puede pasar un cierre en lugar de la función o usar llamada , aplicar o vincular :

 //closure example obj.fn=(function(w){//w is available because the returned function is a closure return function(){ w.sayHi(); } }(window)); obj.fn();//=Window //using call obj.fn.call(window);//=Window //using apply obj.fn.apply(window);//=Window //using bind var boundFn=obj.fn.bind(window); boundFn();//=Window 

Eso fue cuando pasas una función como parámetro en otro objeto. Cuando usa funciones constructor, this dentro del cuerpo de la función se referirá al objeto que se creará.

Pero cuando pasas por sus funciones, puede que no sea:

 var obj={ name:"obj" } var Test=function(){ this.name="Test"; } Test.prototype.sayHi=function(){ console.log(this.name); }; var t=new Test(); obj.fn=t.sayHi t.sayHi();//=Test obj.fn();//=obj 

Este es un escollo en el que la mayoría de la gente cae al pasar funciones de instancias de objetos a setTimeout o a los manejadores de eventos:

 someButton.onclick=t.sayHi;//when button is clicked this will be the button clicked setTimeout(t.sayHi,100);//when sayHi is executed 'this' will be window 

Para responder a su pregunta sobre obj1 existente dentro del cuerpo de la función del constructor; Yo diría que no (al menos no en Firefox). No tengo un enlace a las especificaciones, pero obj1 se configurará con this cuando la función constructora retorne:

 //clean up window.t delete window.t; var Test=function(){ this.name="Test"; console.log("and window.t is:",window.t);//undefined } Test.prototype.sayHi=function(){ console.log(this.name); }; window.t=new Test(); 

Más sobre las funciones de constructor, prototipo, herencia, anulación y llamada súper aquí .