दुर्भाग्यवश, आप जो कुछ भी कर सकते हैं वह Object.assign
जैसी साधारण चीजें हैं, लेकिन यदि आप दो बार सभी पैराम टाइप करने की रिडंडेंसी को हटाने की कोशिश कर रहे हैं (एक बार कन्स्ट्रक्टर हस्ताक्षर में और एक बार असाइनमेंट में) तो आप ऐसा नहीं कर सकते हैं।
उसने कहा, आप इस तरह एक हैक कर सकते हैं। हालांकि मुझे यकीन नहीं है कि इसके साथ आने वाले obfuscation के प्रयास और modicum इसके लायक है।
var dependencies = ['param1', 'param2', 'param3'];
class Something {
constructor(...params) {
params.forEach((param, index) => this[dependencies[index]] = param);
}
}
var something = new Something('foo', 'bar', 'baz');
// something.param1 === 'foo'
इस तरह आप तर्क के नाम की एक सारिणी का प्रयोग कर रहे हैं, तो एक संदर्भ के रूप में है कि एक ही सरणी का उपयोग करते समय Something
के अपने उदाहरण पर गुण का निर्माण। यह पैटर्न एक कोणीय अनुप्रयोग में अच्छी तरह से काम करेगा जहां आप $inject
संपत्ति सेट करके खनन के माध्यम से निर्भरता नामों को संरक्षित करने का प्रयास कर रहे हैं।
Something.$inject = dependencies;
पुनश्च - शास्त्रीय भाषाओं के अनावश्यक नरक है कि मैं सोचा मैं जब मैं एक जे एस डेवलपर बन गया से भाग गया में आपका स्वागत है: ईमानदारी से पी
, तो आप शायद सिर्फ एक क्लासिक वस्तु जब तक शाब्दिक का उपयोग करना चाहिए आपको वास्तव में वास्तविक वर्ग की औपचारिकता की आवश्यकता है।
संपादित करें: मुझे लगता है कि यदि आप एक शाब्दिक और वास्तविक वर्ग की औपचारिकता की आसानी चाहते हैं तो आप अपने कन्स्ट्रक्टर में एक वस्तु को शाब्दिक स्वीकार कर सकते हैं।
class Something {
constructor(params) {
Object.keys(params).forEach((name) => this[name] = params[name]);
}
}
var something = new Something({
param1: 'foo',
param2: 'bar',
param3: 'baz'
});
लेकिन अब तुम सिर्फ एक गतिशील वर्ग है कि किसी भी गुणों के साथ instantiated जा सकती है, में एक वर्ग बदल दिया है, एक वस्तु शाब्दिक की तरह थोड़े: पी
आमतौर पर मैं एक वर्ग चाहता हूँ क्योंकि मैं औपचारिक रूप देने चाहते हैं ऑब्जेक्ट और एक सतत और सख्ती से परीक्षण योग्य एपीआई प्रस्तुत करते हैं।
क्या इसे कक्षा होने की आवश्यकता है? आप शॉर्टैंड ऑब्जेक्ट का उपयोग कर सकते हैं ताकि परम को उनके नाम दोहराए बिना गुणों के रूप में असाइन किया जा सके। – Touffy
अपने अंतिम प्रश्न का उत्तर देने के लिए, सजावटी यहां सहायता नहीं करेंगे क्योंकि उन्हें 'क्लास कन्स्ट्रक्टर' – CodingIntrigue