Đối với nhiều công dụng, tôi không nghĩ rằng gương sẽ là khác biệt so với Java phản ánh . Điều quan trọng nhất cần hiểu về các gương là chúng tách các API phản chiếu khỏi API đối tượng tiêu chuẩn, vì vậy thay vì obj.getClass() bạn sử dụng phản ánh (obj). Đó là một sự khác biệt dường như nhỏ, nhưng nó mang đến cho bạn một vài điều tốt đẹp:
- API đối tượng không bị ô nhiễm và không có nguy cơ phá vỡ phản xạ bằng cách ghi đè phương pháp phản xạ.
- Bạn có thể có các hệ thống gương khác nhau. Giả sử, cái không cho phép truy cập vào các phương thức riêng tư. Điều này có thể sẽ rất hữu ích cho các công cụ.
- Hệ thống gương không cần phải được bao gồm. Để biên dịch sang JS, điều này có thể quan trọng. Nếu gương không được sử dụng thì không có out-of-band để truy cập mã và cắt tỉa trở thành khả thi.
- Gương có thể được thực hiện để hoạt động trên mã từ xa, không chỉ mã cục bộ, vì bạn không cần đối tượng được phản chiếu ở cùng một Isolate hoặc VM làm gương.
Sau đây là cách gương khác với phản ánh trong Java và Javascript khi được sử dụng để có được phương pháp của một đối tượng:
Java:
myObject.getClass().getMethods(); // returns an array
Dart:
reflect(myObject).type.methods; // returns a map
Javascript:
var methods = [];
for (var m in myObject) {
if (typeof m === 'function') {
methods.push(m);
}
}
Nguồn
2012-08-27 17:01:47
bạn có thể tóm tắt không? –