पर केवल एक गेटर है, मैं पुराने ईएस 6 कक्षाओं में पुराने (फ़ंक्शंस और प्रोटोटाइप) की हैकी जावास्क्रिप्ट कक्षाओं का उपयोग करने से आगे बढ़ रहा हूं।Uncaught TypeError: संपत्ति प्लेयर सेट नहीं किया जा सकता है # में से कोई भी जो लाइन 4
मैं शायद कुछ बेवकूफ कर रहा हूँ, लेकिन मुझे यकीन है कि मैं क्यों ऐसा करने की अनुमति नहीं कर रहा हूँ नहीं कर रहा हूँ:
class Player{
constructor(playerNo){
this.playerNo = playerNo;
}
get playerNo(){
return this.playerNo;
}
set cards(playersCards){
this.cards = playersCards;
}
get cards(){
return this.cards;
}
}
var steve = new Player(1);
यह मुझे त्रुटि देता है: Uncaught TypeError: Cannot set property playerNo of # which has only a getter on line 4
तो, मैं करने की कोशिश की नीचे:
class Player{
constructor(playerNo){
this.playerNo = playerNo;
}
set playerNo(no){
this.playerNo = no;
}
get playerNo(){
return this.playerNo;
}
set cards(playersCards){
this.cards = playersCards;
}
get cards(){
return this.cards;
}
}
var steve = new Player(1);
कौन सा मुझे देता है: Uncaught RangeError: Maximum call stack size exceeded on line 6
(जो लाइन this.playerNo = no;
है)।
कोई विचार?
आप यहां गेटर्स/सेटर्स का उपयोग क्यों कर रहे हैं? आपको उनकी आवश्यकता नहीं है। – Bergi
वे अच्छे अभ्यास कर रहे हैं, है ना? इसके अलावा, मैं जल्द ही प्रमाणीकरण को लागू करने की योजना बना रहा हूं, और बिना सेटर्स के जिसमें बहुत से स्थानों में कोड बदलना शामिल होगा। उनका उपयोग करने के लिए क्या कारण हैं? – Jonah
नहीं, वे अच्छे अभ्यास नहीं करते हैं जब वे कुछ भी विशेष नहीं करते हैं (और इसके अतिरिक्त, वे धीमे होते हैं)। वे सिर्फ कोड जटिल करते हैं। हां, आप उनका उपयोग कर सकते हैं * जब * आप सत्यापन लागू करते हैं, यह ठीक है, लेकिन आपको * तब * का उपयोग नहीं करना चाहिए। – Bergi