2015-07-15 17 views
27

Làm cách nào để liệt kê các phương thức của một lớp ES6? tương tự như Object.keysCách liệt kê các phương thức lớp học es6

Dưới đây là một ví dụ:

class Callbacks { 
    method1() { 
    } 

    method2() { 
    } 
} 

const callbacks = new Callbacks(); 

callbacks.enumerateMethods(function(method) { 
    // method1, method2 etc. 
}); 

Trả lời

30

Object.keys() lặp chỉ tính đếm được của các đối tượng. Và phương pháp ES6 thì không. Bạn có thể sử dụng một cái gì đó như getOwnPropertyNames(). Ngoài ra các phương pháp được định nghĩa trên nguyên mẫu của đối tượng của bạn, do đó bạn cần Object.getPrototypeOf() để có được chúng. Làm việc example:

for (let name of Object.getOwnPropertyNames(Object.getPrototypeOf(callbacks))) { 
    let method = callbacks[name]; 
    // Supposedly you'd like to skip constructor 
    if (!(method instanceof Function) || method === Callbacks) continue; 
    console.log(method, name); 
} 

Xin lưu ý rằng nếu bạn sử dụng biểu tượng như phím phương pháp mà bạn sẽ cần phải sử dụng getOwnPropertySymbols() để lặp qua chúng.

+1

Bạn cũng cần phải thực hiện 'getOwnPropertySymbols'. Hoặc sử dụng 'Reflect.ownKeys' – loganfsmyth

0

Không có phương thức lặp/chuyển đổi như Object.keys trong ES6 (chưa?). tuy nhiên, bạn có thể sử dụng for-of để lặp qua các phím:

+0

Tôi mặc dù nó là' for ... in' cho các khóa thuộc tính, và 'cho ... của' cho kiểu 'foreach' –

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