2012-09-02 45 views
5

Tôi đã tạo jsfiddle sau đây làm nổi bật vấn đề của tôi. http://jsfiddle.net/UTG7U/Hàm bên trong không thể truy cập biến chức năng bên ngoài

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

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

Tôi mới vào JavaScript và cố gắng để tạo ra một đối tượng, lĩnh vực và một phương pháp. Tôi không thể lấy phương thức truy cập biến trường của mình.

+0

Đó là khuyến cáo bạn sử dụng các mảng đen '[]' để tạo ra một mảng thay vì 'mảng mới (); ' – 0x499602D2

Trả lời

6

bạn đang cố gắng truy cập vào một biến địa phương sử dụng toán tử này là sai, vì vậy đây là ví dụ làm việc

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

Bạn không cần số this.myArray. Chỉ sử dụng myArray sẽ đủ (và hoạt động).

1

alert(myArray); nên hoạt động tốt tôi nghĩ

1

this là các thay đổi với phạm vi của từng chức năng. Tuy nhiên, myArray sẽ hiển thị với chức năng bên trong. Ví dụ:

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

Bạn đã nhầm lẫn hai loại biến: Biến cục bộ và biến thành viên. var myArray là biến địa phương. this.myArray là biến thành viên.

Giải pháp chỉ sử dụng biến cục bộ:

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

Giải pháp chỉ sử dụng các biến thành viên:

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

Bạn đã trả lời câu hỏi này khá lâu rồi, nhưng tôi không nghĩ câu trả lời thứ hai của bạn sẽ hoạt động. Trong trường hợp đó, 'this' đang đề cập đến hàm bên trong, không phải là bên ngoài. – rjcarr

+1

Hãy dùng thử. Nó hoạt động. Đó là bởi vì 'this' đề cập đến" điều trước dấu chấm "mà trong trường hợp này là' exampleObj'. –

Các vấn đề liên quan