2011-11-19 21 views
6

मैं एक छोटा सा खेल - रॉक पेपर कैंची बना रहा हूं।मैं जावा में एक अमूर्त विधि की तरह जेएस में एक विधि कैसे बना सकता हूं?

मैं एक प्रोटोटाइप है - RPSPlayer और मैं खिलाड़ियों के दो प्रकार के होते हैं: Player1, Player2 (PLAYER1 & player2 RPSPlayer के एक प्रोटोटाइप के साथ वस्तुओं रहे हैं) प्रत्येक खिलाड़ी समारोह के साथ खेलता है: Player1.play()

प्रत्येक खिलाड़ी के पास गेम के लिए एक अलग रणनीति होती है। इस प्रकार, मुझे play() के लिए 2 कार्यान्वयन की आवश्यकता है। यदि यह जावा था, तो मैं एक अमूर्त विधि RPSPlayer एक अमूर्त विधि play() और 2 अन्य वर्गों के साथ RPSPlayer से प्राप्त करता हूं; उनमें से प्रत्येक का play() के लिए अपना कार्यान्वयन होगा।

मेरा प्रश्न है: जेएस में ऐसा करने का सही तरीका क्या है? मुझे आशा है कि मैंने खुद को स्पष्ट कर दिया, सभी को धन्यवाद।

उत्तर

10

आप प्रोटोटाइप पर एक खाली समारोह को परिभाषित कर सकते हैं:

RPSPlayer.prototype.play = function() { 
    throw new Error('Call to abstract method play.'); 
}; 

यह वह जगह है:

RPSPlayer.prototype.play = function() {}; 

या यदि आप इस समारोह के एक कार्यान्वयन बाध्य करना चाहते हैं, तो आप यह एक त्रुटि फेंक कर सकते हैं कैसे Google Closure library यह क्या कर रहा है, इसके goog.abstractMethod function साथ:

goog.abstractMethod = function() { 
    throw Error('unimplemented abstract method'); 
}; 

जिसे

Foo.prototype.bar = goog.abstractMethod 
+0

के रूप में उपयोग किया जाना है, लेकिन मैं दो अलग-अलग play() फ़ंक्शंस को कहां कार्यान्वित करता हूं? –

+0

@rob: ठीक है, या तो आप इसे 'प्लेयर 1.play = function() {} ...', या, यदि 'प्लेयर 1' और' प्लेयर 2 'वास्तव में "वर्ग" विरासत से प्राप्त करने के बाद प्रत्येक खिलाड़ी को असाइन करते हैं 'RPSPlayer', आप उनके प्रोटोटाइप पर कार्यों को परिभाषित करते हैं। –

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