Trong khi bạn về mặt lý thuyết có thể viết một công cụ phân tích tĩnh mà phát hiện sử dụng như là toàn thể được định nghĩa trong các tập tin khác, chẳng hạn như sử dụng MyObject
, bạn thực tế không thể theo dõi việc sử dụng phương thức mở rộng prototype
.
JavaScript là một ngôn ngữ động, đánh máy nên không có cách nào thiết thực cho bất kỳ công cụ để biết rằng a
, nếu ngất xỉu của g
chức năng, là một Array
, và vì vậy nếu f()
được gọi vào nó có một sự phụ thuộc. Nó chỉ được xác định những gì biến giữ những loại tại thời gian chạy, do đó, để tìm ra bạn cần một thông dịch viên và bạn đã làm cho mình một vấn đề Turing-hoàn thành.
Chưa kể các khía cạnh động khác của JavaScript hoàn toàn phân tích tĩnh phân tích, chẳng hạn như tìm nạp thuộc tính theo ký hiệu ngoặc vuông, số eval
hoặc chuỗi trong thời gian chờ hoặc thuộc tính xử lý sự kiện.
Tôi nghĩ rằng đó là một chút không khởi động thực sự. Bạn có thể tốt hơn việc theo dõi các phụ thuộc theo cách thủ công, nhưng đơn giản hóa nó bằng cách nhóm các hàm liên quan thành các mô-đun sẽ là đơn vị theo dõi phụ thuộc cơ bản của bạn. OK, bạn sẽ kéo thêm một vài chức năng mà bạn cần kỹ thuật, nhưng hy vọng không quá nhiều. Nó cũng là một ý tưởng tốt để không gian tên mỗi mô-đun, do đó, nó rất rõ ràng nơi mà mỗi cuộc gọi đang đi, làm cho nó dễ dàng để giữ cho các phụ thuộc trong kiểm soát bằng tay (ví dụ: một bình luận // uses: ThisModule, ThatModule
ở đầu trang).
Vì các phần mở rộng của các mẫu thử được tích hợp sẵn hơn để theo dõi, hãy giữ chúng ở mức tối thiểu. Mở rộng ví dụ. Array
để bao gồm các phương thức ECMAScript Fifth Edition (như indexOf
) trên các trình duyệt chưa có chúng là một việc tốt để làm bản sửa lỗi cơ bản mà tất cả các tập lệnh sẽ sử dụng. Thêm chức năng tùy ý hoàn toàn mới vào các nguyên mẫu hiện có là vấn đề.
Bạn có muốn tạo biểu đồ thể hiện chức năng nào được gọi bằng các chức năng khác không? Đó là những gì tôi hiện đang cố gắng làm, và tôi tự hỏi nếu bạn đang cố gắng để giải quyết cùng một vấn đề mà tôi. :) –
@AndersonGreen Bạn đang tìm kiếm một cái gì đó như [Code2Flow] (https://github.com/scottrogowski/code2flow)? –