2012-06-09 7 views
6

Estoy siguiendo un tutorial de JavaScript y puedo completarlo. Pero el problema es que no entiendo lo que está haciendo una de las líneas. Tengo una función setAge() y luego, después de crear un objeto susan, establecí una de las propiedades para ese objeto como el nombre de la función? No entiendo por qué esto está hecho. ¿No podría usar la función/método sin hacer esto?Noob Preocupación: uso de la función de JavaScript

El código tutorial:

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work? 

// here, update Susan's age to 35 using the method 
susan.setAge(35); 

Respuesta

8

Se asignación de susan 's propiedad setAge a la función definida anteriormente,

function (newAge) { 
    this.age = newAge; 
}; 

que es una función de aceptar un argumento. Cuando se llama susan.setAge(35);, this se referirá a la persona que llama, susan, la actualización de su edad a 35.

La confusión podría ser de setAge ser utilizado dos veces. La función de Susan se define en el lado izquierdo, el lado derecho ya está definido. Por ejemplo:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

funciona igual. setAge es también "reutilizable":

harry = new Object(); 
harry.iAmThisOld = setAge; 
harry.iAmThisOld(55); 

demostraciónhttp://jsfiddle.net/7JbKY/2/

-1

esto es una cuestión de alcance y cierre. Para obtener más información acerca de esto, le recomiendo que lea este artículo: http://nesj.net/blog/2012/03/javascript-scope-and-closure/

+0

Esta pregunta no tiene nada que ver con el alcance o el cierre. Se trata del hecho de que las funciones son objetos como cualquier otra cosa en javascript. Como tales, se pueden pasar como parámetros, asignados a variables, etc. – jatrim

0

Funciona debido a ámbitos variables.

La primera setAge variable es sólo una función y se puede llamar así: setAge(24) No es tan diferente a function setAge(age) {this.age = age}

Después de declarar la variable setAge y establecer su contenido a una función, se puede establecer otra variable a esta variable. Lo que estás haciendo en el objeto es solo esto. Después de escribir susan.setAge = setAge; La propiedad setAge de su objeto será igual a la variable setAge anterior que es una función. Entonces, puedes llamar al susan.setAge().

0

vamos a ver lo que se hace en el código-

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

aquí se define una función que va a cambiar la variable edad de un objeto al especificado al llamar a la función.

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge; 

aquí estamos estableciendo un valor predefinido a susan.age que será cambiado por la función y estamos estableciendo el valor de la función de susan.mynewageis variables para hacer la función disponible la próxima vez en cualquier otro caso .

susan.mynewageis(35); 

aquí estamos estableciendo el valor de susan.age en 35 como se especifica al llamar a la función.

Iba a publicar esta respuesta, pero por error presioné el botón enviar y publiqué una respuesta incompleta.

Cuestiones relacionadas