τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το αντικείμενο Reflect, όπως το αντικείμενο Proxy, είναι ένα νέο API που παρέχεται από το ES6 για αντικείμενα λειτουργίας. Τα αντικείμενα Reflect έχουν σχεδιαστεί για 4 σκοπούς.
// 老写法
try {
Object.defineProperty(target, property, attributes);
// success
} catch (e) {
// failure
}
// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
// success
} else {
// failure
}
// 老写法
'assign' in Object // true
// 新写法
Reflect.has(Object, 'assign') // true
Proxy(target, {
set: function(target, name, value, receiver) {
var success = Reflect.set(target, name, value, receiver);
if (success) {
console.log('property ' + name + ' on ' + target + ' set to ' + value);
}
return success;
}
});
Η μέθοδος Proxy παρεμποδίζει τη συμπεριφορά εκχώρησης χαρακτηριστικών του αντικειμένου προορισμού. Χρησιμοποιεί τη μέθοδο Reflect.set για να εκχωρήσει τιμές στις ιδιότητες του αντικειμένου, διασφαλίζοντας ότι η αρχική συμπεριφορά έχει ολοκληρωθεί και, στη συνέχεια, αναπτύσσει πρόσθετη λειτουργικότητα.
Reflect.get(target, propertyKey[, receiver]): Λάβετε τις ιδιότητες του αντικειμένου.
Reflect.set(target, propertyKey, value[, receiver]): Ορίστε τις ιδιότητες του αντικειμένου.
Reflect.has(target, propertyKey): Προσδιορίστε εάν η ιδιότητα υπάρχει στο αντικείμενο.
Reflect.deleteProperty(target, propertyKey): Διαγράψτε τις ιδιότητες του αντικειμένου.
Reflect.ownKeys(target): Επιστρέφει έναν πίνακα με όλες τις ιδιότητες του ίδιου του αντικειμένου.
Reflect.getOwnPropertyDescriptor(target, propertyKey): Λάβετε τον περιγραφέα της ιδιότητας αντικειμένου.
Reflect.defineProperty(target, propertyKey, χαρακτηριστικά): Ορισμός ή τροποποίηση των ιδιοτήτων του αντικειμένου.
Reflect.preventExtensions(target): Αποτρέψτε την επέκταση του αντικειμένου.
Reflect.isExtensible(target): Προσδιορίστε εάν το αντικείμενο είναι επεκτάσιμο.
Reflect.getExtension(target): Λάβετε το πρωτότυπο του αντικειμένου.
Reflect.setPrototypeOf(target, prototype): Ορίστε το πρωτότυπο του αντικειμένου.
Παράδειγμα 1: Χρήση Reflect.get
let obj = { name: "Alice", age: 25 };
let propName = "name";
console.log(Reflect.get(obj, propName)); // 输出:Alice
console.log(Reflect.get(obj, "gender")); // 输出:undefined
Παράδειγμα 2: Χρήση Reflect.set
let obj = { name: "Alice" };
// 设置属性
console.log(Reflect.set(obj, "age", 30)); // 输出:true
console.log(obj); // 输出:{ name: "Alice", age: 30 }
Παράδειγμα 3: Χρήση Reflect.has
let obj = { name: "Alice" };
console.log(Reflect.has(obj, "name")); // 输出:true
console.log(Reflect.has(obj, "age")); // 输出:false
Παράδειγμα 4: Χρήση Reflect.deleteProperty
let obj = { name: "Alice", age: 30 };
// 删除属性
console.log(Reflect.deleteProperty(obj, "age")); // 输出:true
console.log(obj); // 输出:{ name: "Alice" }
Παράδειγμα 5: Χρήση Reflect.ownKeys
let obj = { name: "Alice", age: 30 };
console.log(Reflect.ownKeys(obj)); // 输出:["name", "age"]
Παράδειγμα 6: Χρήση του Reflect.preventExtensions
let obj = { name: "Alice" };
// 防止对象被扩展
console.log(Reflect.preventExtensions(obj)); // 输出:true
// 尝试添加新属性
console.log(Reflect.set(obj, "age", 30)); // 输出:false
Παράδειγμα 7: Χρήση Reflect.isExtensible
let obj = { name: "Alice" };
console.log(Reflect.isExtensible(obj)); // 输出:true
Παράδειγμα 8: Χρήση Reflect.getPrototypeOf και Reflect.setPrototypeOf
let proto = { sayHello: function() { console.log("Hello!"); }};
let obj = Object.create(proto);
console.log(Reflect.getPrototypeOf(obj) === proto); // 输出:true
// 设置新原型
let newProto = { sayGoodbye: function() { console.log("Goodbye!"); }};
Reflect.setPrototypeOf(obj, newProto);
console.log(obj.sayGoodbye); // 可以访问新原型上的方法
obj.sayGoodbye(); // 输出:Goodbye!
Το αντικείμενο Reflect παρέχει ένα σύνολο μεθόδων που αντιστοιχούν σε παγίδες διακομιστή μεσολάβησης, καθιστώντας την υποκλοπή λειτουργιών JavaScript πιο διαισθητική και βολική. Η χρήση του Reflect διασφαλίζει τη συνέπεια και την αναμενόμενη συμπεριφορά των λειτουργιών, ειδικά όταν οι συνθήκες αστοχίας ή τα σφάλματα πρέπει να αποτυπωθούν ρητά.