2012-07-01 13 views
12
var tools = {}; 

tools.triangle = function() { 
    var originX = 0; 
    var originY = 0; 
} 

 Diferencia entre var y esto en las funciones de Javascript?

var tools = {}; 

tools.triangle = function() { 
    this.originX = 0; 
    this.originY = 0; 
} 

¿Hay alguna diferencia entre estos dos bloques de código? Lo siento si esto se ha preguntado antes.

+1

'var' variable es privada. 'this' variable es público. – elclanrs

+1

@ elclanrs: ese comentario no es útil porque es engañoso. Las variables se pueden declarar como globales, 'this' está relacionado con el contexto de ejecución, no es una variable en el sentido habitual, aunque puede considerarse una variable local. – RobG

Respuesta

11

var crea una variable local dentro tools.triangle. Las variables originX y originY no pueden interactuar con fuera de tools.triangle. this es un puntero al objeto actual con el que se está tratando. El segundo ejemplo se puede usar para dar propiedades a un objeto haciendo new tools.triangle();. Si no se utiliza new y sólo tiene que utilizar tools.triangle();, this apuntará al objeto global que es el objeto window. Se puede cambiar el objeto al que this puntos mediante el uso de los métodos de la función call(); y apply(); así:

var myObj = {}; 

tools.triangle.call(myObj); 

// "this" in tools.triangle now points to myObj 
// myObj now has the properties originX and originY 

Es importante saber que this pueden hacer referencia a cualquier objeto, así como ser indefinido o null en modo estricto ES5 .

Puede encontrar más información here.

+0

Bien, gracias por la respuesta. –

+0

'this' necesita más explicación que la proporcionada, está configurada por la llamada y puede hacer referencia a ** cualquier objeto **, así como ser indefinido o' nulo' en el modo estricto de ES5. – RobG

+0

@ 0x499602D2 Gracias por su respuesta. Realmente estaba buscando esto. Tampoco estaba al tanto del hecho de que el método 'call' (y' apply') podría cambiar el alcance. – GuyT

0

En el primer ejemplo, X e Y ambos existen como variables locales para el cierre guardado en la variable triangle. En el segundo ejemplo, X e Y existen como variables para el objeto tools.triangle debido al uso de this.

Cuestiones relacionadas