2015-07-01 17 views
6

Tôi đang cố gắng liệt kê tất cả các biến toàn cục, bao gồm các biến số tham chiếu đến built-in objects.Liệt kê tất cả các biến toàn cục trong Node.js

Trong giao diện điều khiển của Chrome tôi có thể chỉ cần gõ this và lấy lại tất cả các phím, bao gồm những thứ như String, Number vv

Tuy nhiên khi tôi làm điều này trong Node.js tôi nhận được ít hơn nhiều:

> Object.keys(this) 
[ 'global', 
    'process', 
    'GLOBAL', 
    'root', 
    'Buffer', 
    'setTimeout', 
    'setInterval', 
    'clearTimeout', 
    'clearInterval', 
    'setImmediate', 
    'clearImmediate', 
    'console', 
    'module', 
    'require', 
    '_' ] 
> this.eval 
[Function: eval] 

Trường hợp là this.eval đến từ đâu?

+1

Hãy thử 'Object.keys (Object.getPrototypeOf (this))' và 'Object.getOwnPropertyNames (this)' (cho các thuộc tính kế thừa và không liệt kê tương ứng) – Bergi

+0

'Object.getOwnPropertyNames (this)' đã thực hiện mẹo, cảm ơn @Bergi! – liadmat

+1

Trong một tệp, tệp được tải dưới dạng mô-đun, trong đó 'this' không phải là đối tượng chung. – Bergi

Trả lời

5

Việc xây dựng trong tính chất của đối tượng chung không được liệt kê, do đó, Object.keys không trả về chúng. Thay vào đó, bạn có thể sử dụng Object.getOwnPropertyNames.

3

Chức năng sau đây globals() sẽ giúp bạn có đối tượng không gian tên toàn cầu:

function globals() { return this; } 

Với nó, bạn có thể liệt kê tất cả các biến của không gian tên toàn cầu bất cứ lúc nào bạn muốn:

function varsList() { 
    return Object.getOwnPropertyNames(globals()); 
} 
+1

Và ở chế độ nghiêm ngặt? ;-) – RobG

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