2011-03-17 946 views
15

Hola a todos, este es el # 23 de John Resig avanzada JavaScript http://ejohn.org/apps/learn/#23, llamadosJavaScript - funcionan como una propiedad de objeto

What happens if a function is an object property.

1) en relación con el vocabulario, la katana variable es el objeto, ¿derecho? Si la función anónima es su propiedad, ¿a qué se llama "uso"? Pensé que el "uso" también se habría llamado una propiedad. o es "usar" también un objeto porque contiene un valor, a saber, una función?

2). ¿El propósito de la función es cambiar isSharp: true to isSharp: false? ¿Qué hace! This.isSharp exactamente?

3) Cuando afirma! Katana.isSharp, ¿qué es lo que realmente afirma? ¿Que es ahora Sharp se ha establecido en "falso"?

var katana = { 
    isSharp: true, 
    use: function(){ 
    this.isSharp = !this.isSharp; 
    } 
}; 
katana.use(); 
assert(!katana.isSharp, "Verify the value of isSharp has been changed."); 

Respuesta

20
  1. Sí, katana es un objeto (creada usando la notación { ... }). "use" es el nombre de la propiedad del objeto cuyo valor será la función anónima (que también es un objeto).

  2. La función invierte el valor de isSharp (por lo que desde true a false o false a true).

  3. Se afirma que isSharp es algo que no se evalúa como verdadera (esto es casi todo, excepto undefined, null, false, 0, etc). En este caso, dado que isSharp siempre es true o false, se afirma que es false.

El punto principal (y parte fresca) de la muestra es esta línea:

katana.use(); 

Esta primera obtiene el valor de la propiedad "uso" del objeto katana (que es la parte katana.use) . El valor es la función anónima de antes. Luego, esa función se ejecuta (esa es la parte ()). La parte más interesante es que se ejecuta en nombre del objeto katana - eso significa this en la función anónima es una referencia al objeto katana cuando se lo llama de esa manera.

+0

afirma que isSharp es "falsy"! falsy y no cierto son (distintamente) diferentes. – Raynos

+0

@Raynos: Je, sí, es por eso que puse "no verdadero" en lugar de "no" verdadero ". Tiene sentido si define verdadero como "algo que no es falso" :-) Lo voy a hacer menos ambiguo, gracias por señalarlo – Cameron

+0

muchas gracias. Usted dice que lo bueno es que se ejecuta en nombre del objeto Katana. ¿Por qué es genial? ¿Crea alguna ventaja práctica? Si es así, ¿cuál es la ventaja práctica que ofrece? – mjmitche

1

1) Katana es un objeto. Katana.use es una función. Es una propiedad que contiene una función como valor. El valor que contiene pasa a ser una función anónima. La diferencia es que Katana.use es una propiedad de Katana y que el valor de Katana.use es una función. use es una clave definida en Katana ya que Katana["use"] también funciona.

2) puede ser prender isSharp a NO isSharp así que o verdad -> falsa o falso -> true

3) la aserción está diciendo katana.isSharp === false la que debe ser ya que era originalmente cierto, pero luego se pone a falso.

1
  1. use es una propiedad del objeto katana.
  2. ! This.isSharp negará el valor de this.isSharp. Ex si isSharp es verdadero, devolverá falso, en caso contrario devolverá false.
  3. El assert verifica si el resultado del resultado booleano es verdadero. Si el resultado es falso, la afirmación falla.
Cuestiones relacionadas