Có thể xác định lại chức năng JavaScript từ bên trong cơ thể của chính nó. Ví dụ, tôi có thể làm như sau?Chức năng JavaScript định nghĩa lại
function never_called_again(args) {
// Do some stuff
never_called_again = function (new_args) {
// Do some new stuff
}
}
Ở trên có hợp lệ và nó có ngữ nghĩa chính xác không? Tôi không muốn tạo một biến toàn cầu mới với tên hàm cũ, bởi vì tôi đang cố gắng thực hiện loại điều này không nằm trong phạm vi toàn cục, nhưng từ các phạm vi đối tượng khác nhau và tôi không muốn các xung đột tên khi tôi xác định lại chức năng trong phạm vi địa phương đó.
Tôi không biết liệu bạn có thể hay không nhưng nó không có vẻ giống như một điều may mắn để làm. Tôi rõ ràng không biết hoàn cảnh của bạn là gì nhưng điều này nghe có vẻ như nó có một tiềm năng lớn cho sự nhầm lẫn, khó để theo dõi lỗi và khó đọc mã. Tôi muốn suy nghĩ kỹ về việc đây có phải là giải pháp đúng hay nếu bạn muốn sao lưu một bước và đặt câu hỏi đưa bạn đến đây như một câu trả lời. Xin lỗi nếu bạn đã xem xét tất cả các tùy chọn mặc dù. Bạn không bao giờ có thể nói những gì ai đó có thoguth về đã hoặc không ... – Chris
có sử dụng hợp pháp cho điều này, và đây là một điều mạnh mẽ. Mọi người sợ những gì họ không biết, nhưng điều này không có nghĩa là họ xấu. – galambalazs
Lưu ý rằng kỹ thuật này không thực sự xác định lại hàm, nó thay đổi hàm nào 'never_called_again' đề cập đến.Hàm ban đầu không nhất thiết phải biến mất, cho rằng (mặc dù bạn không làm như vậy ở đây) có thể tạo một biến khác tham chiếu đến hàm ban đầu: đặt 'original = never_called_again;' trước khi gán lại 'never_called_again' và' original () 'sẽ gọi bản gốc ... – nnnnnn