2010-10-08 22 views
7

Trong javascript, nó rất phổ biến cho các thư viện/khung công tác để cho phép chúng tôi định nghĩa một chức năng gọi lại để xử lý sau dữ liệu.Hàm load() cho phép người dùng cung cấp gọi lại như thế nào?

ví dụ:

load("5", function(element) { 
    alert(element.name); 
}); 

Tôi tự hỏi hàm load() trông như thế nào để cho phép người dùng cung cấp gọi lại?

Có hướng dẫn tốt cho điều này không?

Trả lời

13

Vâng, load chức năng có thể trông như thế này:

function load(arg, callback) { 

    var element = { name: "foo " + arg }; // something to pass 

    if (typeof callback == 'function') { 
    callback(element); 
    } 
} 

Với typeof kiểm tra chúng ta đảm bảo rằng đối số gọi lại là một đối tượng mà chúng ta có thể gọi, một hàm func sự.

Sau đó, ví dụ của bạn:

load("5", function(element) { 
    alert(element.name); // Will show `"foo 5"`. 
}); 
+0

Wow .. thật đơn giản huh. –

1

Chức năng cũng giống như loại bình thường và có thể được thông qua như là đối số:

function load(param1, callback) { 
    // call the callback parameter one second later 
    setTimeout(function() { 
     callback(param1); 
    }, 1000); 
} 
2
function load(foo, callback) { 
    blah(foo); 
    callback(); 
} 
2
function load(number, callback){ 

    // do something 

    if (callback) { 
     callback(); 
    } 

} 
4

Trong chức năng JavasScript là đối tượng hạng nhất. Điều đó có nghĩa là chúng hoạt động giống như các loại được xây dựng khác. Bạn có thể gán chúng cho các biến, chuyển chúng vào chức năng, vv

Bài viết này là một liên kết hữu ích giải thích cách hoạt động như đối tượng hạng nhất làm việc trong JavaScript: http://helephant.com/2008/08/functions-are-first-class-objects-in-javascript/

Joel Spolsky có một lời giải thích chi tiết và thú vị trên một số trong những điều thú vị/cách bạn có thể sử dụng chức năng như các đối tượng hạng nhất trong JavaScript: http://www.joelonsoftware.com/items/2006/08/01.html

Cuối cùng, vì chính họ cũng đối tượng lớp đầu tiên, chức năng có thể dễ dàng chấp nhận các chức năng khác như các thông số:

var load = function(callback) { 
    // load something here 
    callback(); 
} 
0
function(callback,argumentArray) { 
    var result = callback.apply(this,argumentArray); 
} 

điểm cần lưu ý:

  • this có thể null. Trong trường hợp đó nếu this được sử dụng trong việc thực hiện gọi lại thì nó sẽ trỏ đến đối tượng Global.
  • argumentArray thực sự là JavaScript Array đối số theo yêu cầu của phương thức gọi lại.
Các vấn đề liên quan