2016-08-16 25 views
5

tôi đang cố gắng để truy cập này bên trong mũi tên chức năng của tôi:này là undefined bên trong mũi tên chức năng

import myObject from '../myObjectPath'; 
export const myClass = Fluxxor.createStore({ 
    initialize() { 
     this.list = []; 
     this.id = null; 
    }, 
    myOutsideFunction(variable1) { 
     // here this in NOT undefined 
     myObject.getMyList(this.id, (myList) => { 
      // here this in undefined 
      this.list = myList; 
     } 
    }); 
)}; 

Nhưng bên trong mũi tên chức năng mà trong hàm callback ma này là undefined !!

Tôi đang sử dụng babel để transpile mã:

myOutsideFunction: function myOutsideFunction() { 
    var _this = this; 
    myObject.getMyList(function (myList) { 
     _this.list = myList; 
    }); 
}, 
+0

Liên kết 'this', hoặc lưu trữ nó trong biến tạm thời ngoài phạm vi chức năng mũi tên. – Jite

+0

Giá trị của 'this' phụ thuộc vào cách' myOutsideFunction' được gọi. Nó được gọi như thế nào? –

+1

@Jite toàn bộ ý tưởng sử dụng chức năng mũi tên là không phải ràng buộc điều này! – Besat

Trả lời

4

Nếu thisundefined trong vòng một chức năng mũi tên, nó không xác định bên ngoài của mũi tên là tốt. Chức năng mũi tên chỉ cần chụp this của phạm vi xung quanh.

Trong trường hợp này, bạn khai báo myOutsideFunction làm phương thức trên một đối tượng theo nghĩa đen và không bao giờ ràng buộc hoặc làm bất kỳ điều gì khác gọi nó với đối tượng là this.

Khi gỡ lỗi, nhớ rằng các trình chuyển đổi có thể đổi tên biến (và phải đổi tên this để chụp chính xác). Sử dụng tên gốc trong bảng điều khiển mà không có sourcemaps bao gồm đổi tên sẽ hiển thị cho bạn undefined ngay cả khi giá trị ban đầu không. Đảm bảo bạn sử dụng tên được chuyển đổi trong các lệnh đồng hồ hoặc bảng điều khiển.

+0

nguyên nhân lạ là nó được viết '// ở đây điều này trong NOT undefined' ngay trước cuộc gọi hàm, do đó,' this'không thể được undefined trong chức năng mũi tên –

+0

@ oliv37 nói đúng, điều đó là không thể. Các hàm mũi tên là một tính năng ngôn ngữ và sẽ luôn nhận được cùng 'điều này'. Tôi không nhận thức được bất kỳ thời gian chạy với các lỗi xung quanh đó (vì nó khá cơ bản cho các chức năng mũi tên). – ssube

+0

Đây là những gì tôi mặc dù !! nó không nên có thể! nhưng tôi đã thử nghiệm nhiều lần và tôi nhận được undefined bên trong mũi tên chức năng tuy nhiên nó không phải là undefined ngay trước khi gọi nó là – Besat

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