2010-07-31 23 views
20

Javascript có thể có chức năng dưới dạng văn bản không? Tôi đang suy nghĩ giống như nghịch đảo của eval().Javascript có thể có chức năng dưới dạng văn bản không?

function derp() { a(); b(); c(); } 

alert(derp.asString()); 

Kết quả sẽ giống như "a(); b(); c();"

Hiện nó có tồn tại không?

+0

Có thể chuyển đổi một chức năng Javascript để văn bản, và nó cũng có thể [chuyển đổi văn bản trở lại thành một hàm] (http://stackoverflow.com/questions/2573548/given-a-string-describing-a-javascript-function-convert-it-to-a-java script-func). –

Trả lời

32

cập nhật để bao gồm hãy cẩn thận trong các ý kiến ​​dưới đây từCMS, Tim Down, MooGoo:

Điều gần nhất có sẵn cho những gì bạn đang sau khi được gọi .toString() vào một chức năng để có được những chức năng văn bản đầy đủ, như thế này :

function derp() { a(); b(); c(); } 
alert(derp.toString()); //"function derp() { a(); b(); c(); }" 

You can give it a try here, bạn hãy cẩn thận nhận thức được mặc dù:

  • Các .toString() về chức năng là thực hiện phụ thuộc vào (Spec here phần 15.3.4.2)
    • Từ spec: Một đại diện thực hiện phụ thuộc của hàm được trả về. Biểu diễn này có cú pháp của FunctionDeclaration. Lưu ý đặc biệt rằng việc sử dụng và vị trí của khoảng trống trắng, các dòng termin và các dấu chấm phẩy trong chuỗi đại diện là phụ thuộc vào việc thực thi.
    • Sự khác biệt đáng chú ý trong Opera Mobile, Safari đầu tiên, không hiển thị nguồn giống như ví dụ trên của tôi.
  • Firefox trả về một chức năng biên soạn, sau khi tối ưu hóa, ví dụ:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }
+0

@delnan - Các đối tượng khác nhau ghi đè phương thức 'object.toString()', trong trường hợp hàm bạn nhận được văn bản đầy đủ chức năng :) –

+0

Tôi biết js rất năng động, phản xạ, có chức năng hạng nhất, v.v. là ... tốt, tôi không biết nếu nó là bling-bling tuyệt vời hay không cần thiết. Một kết hợp của cả hai, tôi đoán. – delnan

+0

Chà, mã cũng được thêm định dạng khá ...! – Brandon

3
function derp() { a(); b(); c(); } 

alert(derp.toString()); 
Các vấn đề liên quan