Hướng dẫn javascript get function signature - javascript lấy chữ ký hàm

Tôi có một chức năng:

fs.readFile = function(filename, callback) {
    // implementation code.
};

Đôi khi sau đó tôi muốn thấy chữ ký của hàm trong quá trình gỡ lỗi.

Khi tôi thử console.log(fs.readFile), tôi sẽ nhận được [ FUNCTION ].

Điều đó không cung cấp cho tôi bất kỳ thông tin.

Làm thế nào tôi có thể có được chữ ký của hàm?

Hướng dẫn javascript get function signature - javascript lấy chữ ký hàm

Aadit M Shah

72K28 Huy hiệu vàng163 Huy hiệu bạc292 Huy hiệu Đồng28 gold badges163 silver badges292 bronze badges

Hỏi ngày 26 tháng 9 năm 2013 lúc 7:37Sep 26, 2013 at 7:37

Ashish Negiashish NegiAshish Negi

5.0637 Huy hiệu vàng47 Huy hiệu bạc91 Huy hiệu Đồng7 gold badges47 silver badges91 bronze badges

5

Trong Node.js Cụ thể, bạn phải chuyển đổi hàm thành chuỗi trước khi đăng nhập:

$ node
> foo = function(bar, baz) { /* codez */ }
[Function]
> console.log(foo)
[Function]
undefined
> console.log(foo.toString())
function (bar, baz) { /* codez */ }
undefined
> 

hoặc sử dụng một lối tắt như foo+""

Đã trả lời ngày 26 tháng 9 năm 2013 lúc 7:57Sep 26, 2013 at 7:57

Hướng dẫn javascript get function signature - javascript lấy chữ ký hàm

0

Nếu những gì bạn có nghĩa là "Chữ ký chức năng" là có bao nhiêu đối số mà nó đã xác định, bạn có thể sử dụng:

function fn (one) {}
console.log(fn.length); // 1

Tất cả các chức năng sẽ tự động nhận được một thuộc tính chiều dài.

Đã trả lời ngày 26 tháng 9 năm 2013 lúc 8:30Sep 26, 2013 at 8:30

Hướng dẫn javascript get function signature - javascript lấy chữ ký hàm

Andreas Hultgrenandreas HultgrenAndreas Hultgren

Phù vàng 14,5K4 Huy hiệu vàng42 Huy hiệu đồng4 gold badges42 silver badges48 bronze badges

Tôi không chắc chắn những gì bạn muốn nhưng hãy thử nhìn vào nhật ký console của fiddle này, nó in toàn bộ định nghĩa chức năng. Tôi đang nhìn vào đầu ra Chrome Console.log.

var fs = fs || {};
fs.readFile = function(filename, callback) {
  alert(1);
};
console.log(fs.readFile);

Demo http://jsfiddle.net/k7dma/

Đã trả lời ngày 26 tháng 9 năm 2013 lúc 7:53Sep 26, 2013 at 7:53

Hướng dẫn javascript get function signature - javascript lấy chữ ký hàm

ʞɹᴉʞ ǝʌɐpʞɹᴉʞ ǝʌɐpʞɹᴉʞ ǝʌɐp

4.9506 Huy hiệu vàng38 Huy hiệu bạc60 Huy hiệu Đồng6 gold badges38 silver badges60 bronze badges

1

Chữ ký chức năng trong JavaScript là gì?

JavaScript khá linh hoạt và nhiều người cuối cùng lạm dụng tính linh hoạt đó hoặc sử dụng nó theo cách sai có thể tạo ra một mã lộn xộn.

Trong những ngày đầu khi chúng ta mã hóa một chức năng, chúng ta thường không nghĩ về các lập luận của hàm đó, nhưng theo một cách nào đó, chúng ta luôn làm điều đó và, trong JavaScript, có một chút khác biệt so với các ngôn ngữ khác khi nó đến đến chữ ký chức năng.

Chữ ký hàm bao gồm tên phương thức và số lượng đối số mà hàm cần thiết.

Các tham số của hàm don don cần được khai báo trong phần thân của hàm vì chúng đã được khai báo bên trong tiêu đề chức năng.

Trong JavaScript, các đối số được thông qua vị trí. Vì vậy, nếu tiêu đề hàm chỉ định hai tham số, JavaScript giả định đối số thứ nhất được truyền cho hàm là tham số đầu tiên cũng như đối số thứ hai được truyền cho hàm là tham số thứ hai, v.v.

Hãy cùng xem điều đó trong mã:

Như chúng ta có thể thấy, hàm sendgreetingto được xác định với hai tham số (‘đến và và‘ chào hỏi) và chúng được sử dụng làm đối số cho hàm phương thức console.log ().

Điều gì xảy ra nếu bạn vừa chuyển một đối số cho hàm sendgreetingto khi hàm đang mong đợi hai đối số?

Chà, nếu chúng tôi không nhập đối số thứ hai, nó sẽ sử dụng giá trị mặc định cho tham số đó và nó không được xác định.undefined.

Hãy thử nó:

Một điều quan trọng là JavaScript không hỗ trợ các chức năng quá tải.

Các hàm bị quá tải là các hàm có cùng tên nhưng các chữ ký khác nhau, nghĩa là số lượng của các đối số.

Các chức năng quá tải thực hiện gần như cùng một công việc, nhưng, do các đối số khác nhau, JavaScript diễn giải các chức năng này theo cách khác nhau.

Chúng ta có thể mô phỏng chức năng quá tải bằng cách kiểm tra loại và số lượng đối số, như thế này:

Như bạn có thể nhận thấy, nếu hàm sendgreetingto không nhận được tham số thứ hai, nó sẽ không hiển thị không xác định cho tham số 'lời chào' trong thông báo và, nếu chúng ta chuyển cả hai tham số cho hàm, chúng ta sẽ thấy hoàn chỉnh tin nhắn một cách liền mạch.

SendGreetingTo không quá tải (?) Bởi vì, như đã đề cập, quá tải không tồn tại trong JavaScript, nhưng chúng ta có thể sử dụng các đối số như một cách để thực hiện quá tải trong JavaScript.

Hãy nhớ rằng nếu bạn có hai hàm cùng tên, hàm cuối cùng có mức độ ưu tiên ngay cả khi các hàm đó có số lượng đối số khác nhau.