2016-06-30 14 views
7

क्या जावास्क्रिप्ट क्लास के कन्स्ट्रक्टर में विनाशकारी असाइनमेंट का उपयोग करना संभव है जैसे कि आवृत्ति चर असाइन करने के लिए सामान्य चर के लिए आप इसे कैसे कर सकते हैं?क्या जावास्क्रिप्ट कन्स्ट्रक्टर में इंस्टेंस/सदस्य चर को नष्ट करना संभव है?

निम्न उदाहरण काम करता है:

var options = {one: 1, two: 2}; 
var {one, two} = options; 
console.log(one) //=> 1 
console.log(two) //=> 2 

लेकिन मैं काम करने के लिए निम्नलिखित की तरह कुछ नहीं मिल सकता है:

class Foo { 
    constructor(options) { 
    {this.one, this.two} = options; 
    // This doesn't parse correctly and wrapping in parentheses doesn't help 
    } 
} 

var foo = new Foo({one: 1, two: 2}); 
console.log(foo.one) //=> I want this to output 1 
console.log(foo.two) //=> I want this to output 2 
+2

मैं और अधिक लगता है:

class Foo { constructor(options) { const {one, two} = options; Object.assign(this, {one, two}); // Do something else with the other options here } } 

आप उदाहरण के लिए सभी अपने विकल्पों को लागू करना चाहते हैं, तो आप destructuring बिना Object.assign इस्तेमाल कर सकते हैं:

दूसरा एक Object.assign और destructuring का उपयोग करता है सामान्य सवाल यह है कि क्या एक विनाशकारी असाइनमेंट फॉर्म है जो किसी ऑब्जेक्ट प्रारंभकर्ता के बजाय किसी मौजूदा ऑब्जेक्ट पर गुण बनाने के लिए प्रदान करता है। – Pointy

+1

वैसे भी हमेशा 'ऑब्जेक्ट.साइन (यह, विकल्प) है; ' – Pointy

+1

यह उल्लेखनीय है कि आप कन्स्ट्रक्टर के बाहर भी उसी वाक्यविन्यास को लागू कर सकते हैं। दिए गए दो ऑब्जेक्ट्स हैं: 'ओ ओ = {ए: 1, बी: 2}, पी = {}; '। कम जटिल 'पी' के लिए डीकनस्ट्रक्चर केक की शांति है: '({b: p.b} = o); '' p' के लिए ऑब्जेक्ट {b: 2} 'उत्पन्न करता है। – ftor

उत्तर

6

ऐसा करने के कई तरीके हैं। पहले एक ही और assigns the properties of options to properties on this destructuring उपयोग करता है:

class Foo { 
    constructor(options) { 
    ({one: this.one, two: this.two} = options); 
    // Do something else with the other options here 
    } 
} 

अतिरिक्त कोष्ठकों की जरूरत है, अन्यथा जे एस इंजन एक वस्तु शाब्दिक या एक ब्लॉक बयान के लिए { ... } गलती हो सकती है।

class Foo { 
    constructor(options) { 
    Object.assign(this, options); 
    } 
} 
+0

धन्यवाद @nils! यही वह है जिसकी तलाश में मैं हूं। पहला समाधान सबसे संक्षिप्त है और कोड को पढ़ने/चलाने के दौरान आप पहले से ही जानते हैं या जल्दी से पता लगाएंगे कि थोड़ा अधिक उन्नत विनाश का उपयोग करता है। दूसरा सबसे स्पष्ट और सबसे स्पष्ट है, जबकि आपके द्वारा उल्लिखित उपयोग के मामले में तीसरा शानदार है। – Aaron

संबंधित मुद्दे