Helpex - Trao đổi & giúp đỡ Đăng nhập
25

Có thể trùng lặp:
bí danh của chrome console.log

Điều này thực sự ngớ ngẩn, nhưng tôi không thể viết tắt console.log (tôi đang sử dụng Chrome). Đây là nỗ lực ngây thơ của tôi:

var log = console.log;
log("Bingo");  // Uncaught TypeError: Illegal invocation

Tôi có nên sử dụng apply () không? Nhưng sau đó tôi sẽ phải chuyển qua các lập luận, phải không?

25 hữu ích 0 bình luận 9.2k xem chia sẻ
76

Điều này không thành công vì các tham chiếu đến các phương thức Javascript không bao gồm một tham chiếu đến chính đối tượng. Một cách đơn giản và đúng đắn để gán phương thức console.logcho một biến và áp dụng lệnh gọi consolelà sử dụng bindphương thức trên logphương thức, truyền consoledưới dạng đối số:

var log = console.log.bind(console);

Có một thisđối số ẩn cho mọi phương thức và do thiết kế ngôn ngữ được cho là không tốt, nó không bị đóng lại khi bạn nhận được tham chiếu đến một phương thức. Các bindmục đích phương pháp là để preassign đối số chức năng, và trả về một chức năng chấp nhận phần còn lại của các đối số hàm được mong đợi. Đối số đầu tiên bindluôn phải là thisđối số, nhưng bạn thực sự có thể gán bất kỳ số lượng đối số nào bằng cách sử dụng nó.

Việc sử dụng bindcó một ưu điểm đáng chú ý là bạn không làm mất khả năng chấp nhận nhiều đối số của phương pháp. Ví dụ, console.logcó thể thực sự chấp nhận một số lượng đối số tùy ý và tất cả chúng sẽ được nối trên một dòng nhật ký duy nhất.

Đây là một ví dụ về việc sử dụng bindđể gán trước nhiều đối số hơn cho console.log:

var debugLog = console.log.bind(console, "DEBUG:");

Lời mời debugLogsẽ đặt trước thông điệp nhật ký bằng DEBUG:.

76 hữu ích 4 bình luận chia sẻ
15

Cách đơn giản sẽ là gói nó trong một hàm:

var log = function (l) {
   console.log(l);
}

Nhưng hãy lưu ý rằng console.log có thể nhận số lượng đối số không giới hạn, vì vậy cách thích hợp sẽ là:

var l = function () {
   console.log.apply(console, arguments);
}
15 hữu ích 3 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading