प्रौद्योगिकी साझेदारी

ES6 विस्तृतं व्याख्यानं प्रतिबिम्बयन्तु (3) .

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Reflect object, Proxy object इव, ES6 द्वारा ऑपरेटिंग् ऑब्जेक्ट्स् कृते प्रदत्तं नूतनं API अस्ति । प्रतिबिम्बितवस्तूनि ४ प्रयोजनार्थं निर्मिताः सन्ति ।

  1. Object ऑब्जेक्ट् इत्यस्य केचन मेथड्स् ये स्पष्टतया भाषायाः आन्तरिकाः सन्ति (यथा Object.defineProperty) Reflect ऑब्जेक्ट् इत्यत्र स्थापयन्तु । अस्मिन् स्तरे Object तथा ​​Reflect इत्येतयोः वस्तुयोः उपरि केचन मेथड्स् नियोजिताः सन्ति, भविष्ये च नूतनाः मेथड्स् केवलं Reflect ऑब्जेक्ट्स् इत्यत्र एव नियोजिताः भविष्यन्ति । अन्येषु शब्देषु भाषायाः आन्तरिकविधयः Reflect वस्तुतः प्राप्तुं शक्यन्ते ।
  2. केषाञ्चन Object मेथड् इत्यस्य रिटर्न् रिजल्ट् परिवर्तयन्तु येन ते अधिकं युक्तियुक्ताः भवेयुः । उदाहरणार्थं, Object.defineProperty(obj, name, desc) तदा त्रुटिं क्षिपति यदा गुणः परिभाषितुं न शक्यते, यदा तु Reflect.defineProperty(obj, name, desc) false प्रत्यागमिष्यति ।
// 老写法
try {
  Object.defineProperty(target, property, attributes);
  // success
} catch (e) {
  // failure
}
// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. Object ऑपरेशन्स् कार्यात्मकव्यवहाराः भवेयुः । केचन Object ऑपरेशन्स् अत्यावश्यकाः सन्ति, यथा obj मध्ये name तथा delete obj[name], परन्तु Reflect.has(obj, name) तथा Reflect.deleteProperty(obj, name) तान् कार्यात्मकव्यवहारेषु परिणमयन्ति ।
// 老写法
'assign' in Object // true
// 新写法
Reflect.has(Object, 'assign') // true
  • 1
  • 2
  • 3
  • 4
  1. Reflect ऑब्जेक्ट् इत्यस्य मेथड्स् एकैकं मेथड् इत्यनेन सह सङ्गच्छन्ति यावत् प्रॉक्सी ऑब्जेक्ट् इत्यस्य मेथड् अस्ति तावत् तत्सम्बद्धं मेथड् Reflect ऑब्जेक्ट् इत्यत्र द्रष्टुं शक्यते । एतेन Proxy ऑब्जेक्ट् पूर्वनिर्धारितव्यवहारं पूर्णं कर्तुं तत्सम्बद्धं Reflect मेथड् सहजतया आह्वयितुं शक्नोति तथा च व्यवहारस्य परिवर्तनस्य आधाररूपेण कार्यं करोति । अन्येषु शब्देषु, Proxy पूर्वनिर्धारितं व्यवहारं कथं अपि परिवर्तयति चेदपि, भवान् Reflect इत्यत्र पूर्वनिर्धारितं व्यवहारं सर्वदा प्राप्तुं शक्नोति ।
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;
  }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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, attributes): वस्तुनः गुणाः परिभाषयन्तु अथवा परिवर्तयन्तु।
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
  • 1
  • 2
  • 3
  • 4
  • 5

उदाहरणम् २: Reflect.set इत्यस्य उपयोगः

let obj = { name: "Alice" };

// 设置属性
console.log(Reflect.set(obj, "age", 30)); // 输出:true

console.log(obj); // 输出:{ name: "Alice", age: 30 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

उदाहरणम् ३: Reflect.has इत्यस्य उपयोगः

let obj = { name: "Alice" };

console.log(Reflect.has(obj, "name")); // 输出:true
console.log(Reflect.has(obj, "age"));  // 输出:false
  • 1
  • 2
  • 3
  • 4

उदाहरणम् 4: Reflect.deleteProperty इत्यस्य उपयोगः

let obj = { name: "Alice", age: 30 };

// 删除属性
console.log(Reflect.deleteProperty(obj, "age")); // 输出:true

console.log(obj); // 输出:{ name: "Alice" }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

उदाहरणम् ५: Reflect.ownKeys इत्यस्य उपयोगः

let obj = { name: "Alice", age: 30 };

console.log(Reflect.ownKeys(obj)); // 输出:["name", "age"]
  • 1
  • 2
  • 3

उदाहरणम् 6: Reflect.preventExtensions इत्यस्य उपयोगः

let obj = { name: "Alice" };

// 防止对象被扩展
console.log(Reflect.preventExtensions(obj)); // 输出:true

// 尝试添加新属性
console.log(Reflect.set(obj, "age", 30)); // 输出:false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

उदाहरणम् 7: Reflect.isExtensible इत्यस्य उपयोगः

let obj = { name: "Alice" };

console.log(Reflect.isExtensible(obj)); // 输出:true
  • 1
  • 2
  • 3

उदाहरणम् 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!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Reflect ऑब्जेक्ट् Proxy traps इत्यस्य अनुरूपं मेथड् समुच्चयं प्रदाति, येन जावास्क्रिप्ट्-सञ्चालनानां अवरोधनं अधिकं सहजं सुलभं च भवति । Reflect इत्यस्य उपयोगेन कार्याणां स्थिरतां अपेक्षितव्यवहारं च सुनिश्चितं भवति, विशेषतः यदा विफलतायाः स्थितिः अथवा त्रुटयः स्पष्टतया गृहीतुं आवश्यकाः भवन्ति ।