Nếu proxy chắc chắn xảy ra với bạn, một giải pháp có thể có để giới hạn chức năng thiết lập là trả về phiên bản Proxy ES6.
Theo mặc định, hàm tạo trong javascript trả về this
đối tượng tự động nhưng bạn có thể xác định và trả về hành vi tùy chỉnh bằng cách khởi tạo proxy trên this
làm mục tiêu. Hãy nhớ rằng phương thức set trong proxy sẽ trả về một giá trị boolean.
MDN : The set method should return a boolean value. Return true to indicate that assignment succeeded. If the set method returns false, and the assignment happened in strict-mode code, a TypeError will be thrown.
class Row {
constructor(entry, schema) {
// some stuff
return new Proxy(this, {
set(target, name, value) {
let setables = ['name', 'email'];
if (!setables.includes(name)) {
throw new Error(`Cannot set the ${name} property`);
} else {
target[name] = value;
return true;
}
}
});
}
get name() {
return this._name;
}
set name(name) {
this._name = name.trim();
}
get email() {
return this._email;
}
set name(email) {
this._email = email.trim();
}
}
Vì vậy, bây giờ bạn không được phép để thiết lập các thuộc tính phi setable theo proxy.
let row = new Row({
name : 'John Doe',
email : '[email protected]'
}, Schema);
row.password = 'blahblahblah'; // Error: Cannot set the password property
Cũng có thể có hành vi tùy chỉnh trên phương thức tải.
Lưu ý: Theo MDN vào lúc này, khả năng tương thích trình duyệt cho handler.set()
là không rõ ràng được nêu ra. Tuy nhiên, nó hoạt động cho tôi trên Node v8.1.3
Bạn có thể mô tả sự cố bạn đang cố giải quyết chi tiết hơn không? Dường như bạn đang mô tả một số giải pháp có thể (sử dụng proxy), nhưng không thực sự mô tả những gì bạn đang cố gắng thực hiện. – jfriend00