2012-09-02 9 views
5

Ho creato il seguente jsfiddle che evidenzia il mio problema. http://jsfiddle.net/UTG7U/La funzione interna non può accedere alla variabile delle funzioni esterne

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

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

Sono nuovo di JavaScript e cercando di creare un oggetto, sul campo e un metodo. Non riesco a ottenere il mio metodo per accedere alla mia variabile di campo.

+0

Si consiglia di utilizzare l'array letterale '[]' per creare un array invece di 'new Array (); – 0x499602D2

risposta

6

si stava tentando di accedere a una variabile locale utilizzando questo operatore, che è sbagliato, ecco l'esempio di lavoro

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

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

1

Non è necessario il this.myArray. Usare solo myArray sarà sufficiente (e funzionerà).

1

alert(myArray); dovrebbe funzionare bene penso

1

Cosa this è modifiche con l'ambito di ciascuna funzione. Tuttavia, myArray sarà visibile alla funzione interna. Esempio:

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

Hai confuso due tipi di variabili: variabili locali e variabili membro. var myArray è una variabile locale. this.myArray è una variabile membro.

soluzione utilizzando solo le variabili locali:

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();​ 

soluzione che utilizza solo le variabili membro:

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

Hai risposto a questo punto, ma non credo che la tua seconda risposta funzionerebbe. In tal caso, "questo" si riferisce alla funzione interiore, non a quella esterna. – rjcarr

+1

Provalo. Funziona. Questo perché "questo" si riferisce alla "cosa prima del punto" che in questo caso è "exampleObj". –

Problemi correlati