Làm cách nào để mô phỏng các trình gỡ rối/định dạng __get() và __set() trong JavaScript? Rất nhiều người nói rằng điều này hiện tại là không thể. Tôi gần như chắc chắn rằng nó có thể bởi vì các dự án như nowjs (http://nowjs.com) làm một cái gì đó như thế này.Giám sát tất cả các thuộc tính đối tượng JavaScript (getters và setters ma thuật)
Tôi biết rằng bạn có thể sử dụng get và set, nhưng những điều này không hoạt động khi bạn không chắc chắn tên thuộc tính sẽ là gì. Ví dụ: nếu bạn muốn trình xử lý sự kiện thực thi khi thuộc tính mới được tạo thì sao?
Ví dụ về những gì tôi muốn làm:
var obj = {};
notify(obj, function(key, value) {
//key is now the name of the property being set.
//value is the value of the property about to be set
console.log("setting " + key + " to " + value);
});
obj.foo = 2; //prints "setting foo to 2"
obj.bar = {a: 2}; //prints "setting bar to [Object]"
//Notice that notify() worked even though 'foo' and 'bar' weren't even defined yet!
(Câu hỏi đặt ra là tương tự như các câu hỏi sau:
)
EDIT: Dường như tính năng này được gọi là "proxy động" và sẽ xuất hiện trong tiêu chuẩn "Harmony" ECMAScript (có thể là ES6). Bạn có thể đọc thêm here. Một đối tượng 'Proxy' mới được giới thiệu với một vài phương thức (I.e. Create() và createFunction()).
Người ta có thể làm điều này:
//Constructing an object proxy (proto is optional)
var proxy = Proxy.create(handler, proto);
proxy.foo = 2; //Triggers 'set' function in the handler (read about it)
Bottom line ở đây: nó không hoạt động trong hầu hết các trình duyệt, nhưng một thực hiện có sẵn cho Node.js: node-proxy.
Tính năng này được gọi là proxy là một phần của ECMAScript 6 không 5. – Raynos
Bắt tốt. Đã sửa đổi bài đăng của tôi. Cảm ơn! – BMiner