Reflection trong lập trình là khả năng chương trình quan sát thông tin về object, class hoặc function khi đang chạy. Một số ngôn ngữ còn cho phép gọi method dựa trên tên vừa tìm được.
Xem object đang có gì
const student = { name: "An", active: true };
console.log(Object.keys(student)); // ["name", "active"]
const field = "name";
if (field in student) {
console.log(student[field]); // "An"
}student = {"name": "An", "active": True}
print(list(student.keys())) # ["name", "active"]
field = "name"
if field in student:
print(student[field]) # "An"Lưu ý
Tên field có thể đến từ cấu hình hoặc dữ liệu test tại thời điểm chạy. Lúc ấy chương trình mới tra cứu object; đó là điểm khác với việc viết cố định
student.name.Gọi method theo tên
class Lamp {
turnOn(): void { console.log("Đèn đã bật"); }
}
const lamp = new Lamp();
const methodName = "turnOn";
const method = Reflect.get(lamp, methodName);
if (typeof method === "function") method.call(lamp);class Lamp:
def turn_on(self) -> None:
print("Đèn đã bật")
lamp = Lamp()
method_name = "turn_on"
method = getattr(lamp, method_name, None)
if callable(method):
method()Reflect.get() lấy property theo tên; getattr() là cách tương tự ở Python. Kiểm tra đó là function trước khi gọi sẽ tránh lỗi khi tên bị sai. Ở TypeScript, call(lamp) giúp method nhận đúng this.
| Dùng reflection khi | Viết trực tiếp khi |
|---|---|
| Tên field/method chỉ được biết lúc chạy | Đã biết chắc property cần dùng |
| Cần duyệt nhiều field để lập báo cáo | Chỉ có vài field cố định |




