2012-09-02 12 views
5

He creado el siguiente jsfiddle que resalta mi problema. http://jsfiddle.net/UTG7U/La función interna no puede acceder a las funciones externas variable

var ExampleObject = function() { 
    var myArray = new Array(); 
    this.example = function() { 
     alert(this.myArray); 
    }; 
} 

var exampleObj = new ExampleObject(); 
exampleObj.example();​ 

Soy nuevo en JavaScript y tratando de crear un objeto, ámbito y un método. No puedo obtener mi método para acceder a mi variable de campo.

+0

Se recomienda el uso de la matriz literal '[] 'para crear una matriz en lugar de' new Array (); ' – 0x499602D2

Respuesta

6

que estaba tratando de acceder a una variable local utilizando este operador que está mal, así que aquí está el ejemplo de trabajo

var ExampleObject = function() { 
    var myArray = new Array(1,2,3); 
    this.example = function() { 
     alert(myArray); 
    }; 
} 
var exampleObj = new ExampleObject(); 
exampleObj.example();​ 

Enlace: http://jsfiddle.net/3QN37/

1

No necesita el this.myArray. Usar solo myArray bastará (y funcionará).

1

alert(myArray); debería funcionar bien creo

1

Lo this es cambios con el alcance de cada función. Sin embargo, myArray será visible para la función interna. Ejemplo:

var ExampleObject = function() { 
    var myArray = new Array(); 
    this.example = function() { 
     alert(myArray); 
    }; 
} 
var exampleObj = new ExampleObject(); 
exampleObj.example();​ 
5

Ha confundido dos tipos de variables: Variables locales y variables de miembro. var myArray es una variable local. this.myArray es una variable miembro.

solución utilizando sólo las variables locales:

var ExampleObject = function() { 
    var myArray = new Array(); // create a local variable 
    this.example = function() { 
     alert(myArray); // access it as a local variable 
    }; 
} 

var exampleObj = new ExampleObject(); 
exampleObj.example();​ 

solución utilizando sólo las variables miembro:

var ExampleObject = function() { 
    this.myArray = new Array(); // create a member variable 
    this.example = function() { 
     alert(this.myArray); // access it as a member variable 
    }; 
} 

var exampleObj = new ExampleObject(); 
exampleObj.example();​ 
+0

Respondiste a esto hace bastante tiempo, pero no creo que tu segunda respuesta funcione. En ese caso, 'esto' se refiere a la función interna, no a la externa. – rjcarr

+1

Pruébalo. Funciona. Eso es porque 'this' se refiere a" lo que está antes del punto ", que en este caso es' exampleObj'. –

Cuestiones relacionadas