2011-11-14 35 views
28

Hầu hết các trang web đều nói "callee" là thuộc tính của Function.arguments không được chấp nhận. Nhưng một số trang web đi xa hơn và nói rằng toàn bộ hàm Functions.argument không được chấp nhận Ví dụ: http://aptana.com/reference/api/Arguments.html Tại sao chỉ đề cập đến callee nếu toàn bộ thói quen chết trong nước? Tôi chỉ mới phát hiện ra "tranh luận" và có vẻ như ví dụ cực kỳ hữu ích: http://hungred.com/how-to/secret-arguments-array-javascript/Javascript: mảng đối số không được chấp nhận?

Trả lời

44

Function.arguments bị phản đối, nhưng nó chỉ phản đối ủng hộ của vani arguments đối tượng đó là có sẵn trong một hàm. (ví dụ: sử dụng x = arguments[i]; thay vì x = theFunc.arguments[i];)

Phương pháp này được ưu tiên (và như bạn nói, cực kỳ hữu ích) để truy cập đối số thứ tự nhận được.

+0

Ah, điều đó giải thích! Cảm ơn nhiều. –

+0

Điều này có ý nghĩa. Nếu Javascript bao giờ muốn một số hỗ trợ đa luồng, các đối tượng toàn cục như vậy đang giết chết. –

+0

Tại sao 'Function.arguments' không được chấp nhận? Nó cho phép bạn truy cập trực tiếp vào các đối số của một hàm cha bên trong một hàm lồng nhau, đây là một cái gì đó bạn không thể làm với đối tượng 'arguments'. – Taurus

1

callee không được dùng nữa, nhưng các đối số được sử dụng trong nhiều ứng dụng. Tôi không biết liệu đối số có bị phản đối hay không. Bạn có thể sử dụng nó để có được tất cả các tham số của một hàm, ngay cả khi không được xác định trong hàm (params).

Hầu hết thời gian tôi sử dụng khi phát triển plugin jQuery. Một cái gì đó như:

$.fn.tooltip = function(method) { 
    if (methods[method]) { 
     return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
     return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on jQuery.tooltip'); 
    }  
    }; 

Như bạn thấy chỉ phương pháp được thông qua như là một tham số, nhưng trong những người đầu tiên nếu các đối số được chia sau khi giá trị đầu tiên. Bằng cách này bạn có thể truyền tên hàm và tất cả các tham số được sử dụng bởi hàm này.

Full dụ: http://docs.jquery.com/Plugins/Authoring

1

Không, mảng đối số không tán thành trong phiên bản 5.1 mới nhất của đặc điểm kỹ thuật (xem trang 60). Tuy nhiên, đối tượng caller sẽ chỉ khả dụng nếu mã không ở chế độ nghiêm ngặt.

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