2009-10-23 25 views
6

Tôi khá quen thuộc với jQuery. Tôi đang cố gắng viết các phương pháp phổ biến cho mục đích của riêng tôi. Dưới đây là mẫu bên dưới:Tôi có thể sử dụng jQuery.extend để mô phỏng quá tải phương thức không?

$.extend({ 
    add : function(a, b) 
      { 
      return a + b; 
      }, 

    add : function(a, b, c) 
      { 
      return a + b + c; 
      } 
    }); 

Có thể xảy ra trường hợp trên không? Tôi có thể sử dụng cùng tên extender và chuyển các tham số khác nhau, như nạp chồng phương thức không?

+1

Tôi nghĩ rằng sẽ chỉ ghi đè thuộc tính 'thêm' đầu tiên với số 02 – alex

+0

Tôi giả sử bạn có nghĩa là "quá tải". Nhưng như ghi chú alex, chức năng thứ hai * sẽ * ** ghi đè ** lần đầu tiên ... – Shog9

Trả lời

15

Bạn đang cố gắng thực hiện một số loại nội dung được gọi bằng một số ngôn ngữ quá tải phương thức.

JavaScript không hỗ trợ theo cách đó.

JavaScript rất linh hoạt và cho phép bạn đạt được loại tính năng này theo nhiều cách khác nhau.

Ví dụ cụ thể của bạn, hàm add, tôi khuyên bạn nên tạo một hàm chấp nhận số tham số tùy ý, sử dụng đối tượng arguments.

jQuery.extend(jQuery, { 
    add: function (/*arg1, arg2, ..., argN*/) { 
    var result = 0; 

    $.each(arguments, function() { 
     result += this; 
    }); 

    return result; 
    } 
}); 

Sau đó, bạn có thể vượt qua bất kỳ số lượng đối số:

alert(jQuery.add(1,2,3,4)); // shows 10 

Đối với phương pháp phức tạp hơn quá tải bạn có thể phát hiện số lượng đối số được truyền và các loại của nó, ví dụ:

function test() { 
    if (arguments.length == 2) { // if two arguments passed 
    if (typeof arguments[0] == 'string' && typeof arguments[1] == 'number') { 
     // the first argument is a string and the second a number 
    } 
    } 
    //... 
} 

Kiểm tra bài viết sau, nó chứa một kỹ thuật rất thú vị mà tận dụng lợi thế của một số tính năng ngôn ngữ JavaScript như đóng cửa, ứng dụng chức năng, vv, để bắt chước phương pháp quá tải:

+1

Đã muộn rồi và tôi có thể đọc mã của bạn sai nhưng sẽ không 'jQuery.add (1,2,3,4) 'return' 10'? – Jared

+0

Chức năng của anh ta sử dụng trình phân tích cú pháp mẫu, và xác định số tiếp theo theo thứ tự là 5;) – alex

+0

@Jared: Bạn hoàn toàn đúng, chỉ là lỗi đánh máy! – CMS

3

Tôi nghĩ rằng sẽ chỉ ghi đè thuộc tính 'thêm' đầu tiên với thuộc tính 'thêm' thứ hai mà bạn đã xác định. Điều này rất hữu ích khi phát triển các plugin và muốn cung cấp một danh sách các giá trị mặc định hợp lý cho một đối tượng cấu hình.

0

JavaScript không ném lỗi nếu bạn vượt qua đối số ít để một chức năng hơn nó được xác định để chấp nhận.

Bạn có thể sử dụng một đối số biến trong thiết lập của bạn bằng cách sử dụng "đối số", hoặc bạn có thể xác định hàm của bạn như bạn đã có trong câu lệnh 2 (với 3 tham số) và chỉ cần kiểm tra tham số thứ 3 là không xác định. Nếu một đối số không được cung cấp, nó được thiết lập là không xác định và bạn có thể chỉ cần kiểm tra xem nó (nó không giống như null) có thể đơn giản hơn việc phải sử dụng đối số đối số.

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