2012-09-02 13 views
5

Utworzono następujące jsfiddle, które podkreśla mój problem. http://jsfiddle.net/UTG7U/Funkcja wewnętrzna nie może uzyskać dostępu do zmiennych zewnętrznych

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

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

Jestem nowy w JavaScript i próbuje utworzyć obiekt, pola i metody. Nie mogę uzyskać mojej metody dostępu do mojej zmiennej pola.

+0

Zaleca się użyć tablicę dosłowny '[]' utworzyć tablicę zamiast 'new Array (); ' – 0x499602D2

Odpowiedz

6

były próby uzyskania dostępu do zmiennej lokalnej za pomocą tego operatora, który jest źle, więc tutaj jest przykład roboczych

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

Nie potrzebujesz this.myArray. Samo użycie (i praca) wystarcza.

1

alert(myArray); powinien działać dobrze myślę

1

Co this zmienia się wraz z zakresem każdej funkcji. Jednak funkcja wewnętrzna będzie widoczna dla myArray. Przykład:

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

Pomyliłeś dwa rodzaje zmiennych: zmienne lokalne i zmienne składowe. var myArray jest zmienną lokalną. this.myArray jest zmienną składową.

Rozwiązanie przy użyciu wyłącznie zmienne lokalne:

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

rozwiązanie wykorzystujące wyłącznie zmienne składowe:

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

Odpowiedziałeś na to całkiem niedawno, ale nie sądzę, żeby twoja druga odpowiedź zadziałała. W tym przypadku "to" odnosi się do funkcji wewnętrznej, a nie zewnętrznej. – rjcarr

+1

Spróbuj. To działa. Dzieje się tak dlatego, że 'this' odnosi się do" rzeczy przed kropką ", która w tym przypadku to' przykladObj'. –

Powiązane problemy