2012-07-06 29 views
6

nên ive cướp giao diện điều khiển chức năngđiều khiển trả về undefined

var log = Function.prototype.bind.call(console.log, console); 
console.log = function (a) { 
    log.call(console, a); 
    submitmsg("Log", a); 
}; 

này có tác dụng như mong muốn tuy nhiên nó cũng trả về "không xác định" như một phần thưởng bất ngờ

tôi không thể tìm ra lý do tại sao mà dẫn tôi nghĩ rằng có là cái gì đó hơi sai ở đây

enter image description here

Hello world được tạo ra bởi log.call(console, a) như mong đợi

submitmsg() là chức năng tùy chỉnh của tôi

này đang làm việc một cách chính xác làm thế nào tôi muốn, như tôi đã nói mặc dù im hơi lo ngại rằng nó cũng đang trở lại "không xác định" vì những lý do tôi không hiểu.


Lưu ý: Các mã sau đây được đăng bởi OP như một câu trả lời cho câu hỏi này. Các ý kiến ​​về câu trả lời đã được chuyển đến các ý kiến ​​về câu hỏi.


Vì vậy, mã đúng phải như sau?

var log = Function.prototype.bind.call(console.log, console); 
console.log = function (a) { 
    return log.call(console, a); 
    submitmsg("Log", a) 
}; 
+0

này vẫn còn trở lại "không xác định" – Fibrewire

+0

Đó là bởi vì 'log.call' trả về' undefined'. Đó là lý do tại sao tôi không chắc chắn những gì bạn đang cố gắng để đạt được ... giao diện điều khiển bản địa.phương thức log' trả về 'undefined'. Bạn muốn trở lại cái gì? –

+0

xin lỗi tôi đã gửi lại chi tiết hơn – Fibrewire

Trả lời

10

Nếu tôi đã hiểu chính xác câu hỏi của bạn, đó là vì bạn không trả lời rõ ràng bất kỳ điều gì từ hàm. Khi bạn không trả về một giá trị từ một hàm, nó trả về ngầm undefined.

Ví dụ:

function example() {} 
console.log(example()); //undefined 

này được định nghĩa trong [[Call]] internal method specification (điểm có liên quan được in đậm):

  1. Hãy funcCtx thể là kết quả của việc thiết lập một bối cảnh thực hiện mới cho mã chức năng sử dụng giá trị của [[FormalParameters]] của nội bộ [F FormalParameters]] nội bộ tài sản, các đối số được thông qua Danh sách args, và giá trị này là được mô tả trong 10.4.3.
  2. Cho kết quả là kết quả của việc đánh giá FunctionBody là giá trị của thuộc tính bên trong [[Code]] của F. Nếu F không có [[Code]] thuộc tính nội bộ hoặc nếu giá trị của nó là một FunctionBody trống, thì kết quả là (bình thường, không xác định, trống).
  3. Thoát ngữ cảnh thực thi funcCtx, khôi phục ngữ cảnh thực thi trước đó.
  4. Nếu kết quả.type là ném sau đó ném result.value.
  5. Nếu result.type trả về thì trả về result.value.
  6. Nếu không kết quả.type phải là bình thường. Quay trở lại không xác định.
+0

Xin chào James, tôi đã bắt đầu ở đó, tuy nhiên chức năng đó sẽ ghi đè đầu ra của bàn điều khiển chứ không phải thêm vào nó, mặc dù câu trả lời của bạn là chính xác nó sẽ không thực sự đầu ra cho giao diện điều khiển – Fibrewire

+0

@Fibrewire - Bạn đang mong đợi gì để được trả lại? Phương thức 'console.log' gốc trả về' undefined', vì vậy tôi không thấy vấn đề. –

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