2012-09-04 14 views
52

मैं codecademy.com पर कुछ जावास्क्रिप्ट/jQuery सबक ले रहा हूं। आम तौर पर पाठ उत्तर या संकेत प्रदान करते हैं, लेकिन इसके लिए यह कोई मदद नहीं देता है और मैं निर्देशों से थोड़ा उलझन में हूं।जावास्क्रिप्ट: एक ऑब्जेक्ट लौटने वाला फ़ंक्शन

यह फ़ंक्शन बनाने के लिए कहता हैगेमप्लेयर एक ऑब्जेक्ट को तीन कुंजी के साथ वापस कर देता है।

//First, the object creator 
function makeGamePlayer(name,totalScore,gamesPlayed) { 
    //should return an object with three keys: 
    // name 
    // totalScore 
    // gamesPlayed 
} 

मैं अगर मैं इस

//First, the object creator 
function makeGamePlayer(name,totalScore,gamesPlayed) { 
    //should return an object with three keys: 
    // name 
    // totalScore 
    // gamesPlayed 

     this.name = name; 
     this.totalScore = totalScore; 
     this.gamesPlayed = gamesPlayed; 
} 

या इस

//First, the object creator 
    function makeGamePlayer(name,totalScore,gamesPlayed) { 
     //should return an object with three keys: 
     // name 
     // totalScore 
     // gamesPlayed 

     var obj = { 
      this.name = name; 
      this.totalScore = totalScore; 
      this.gamesPlayed = gamesPlayed; 
      } 
    } 

मैं के बाद ऑब्जेक्ट के गुणों को संशोधित करने के लिए सक्षम होना चाहिए की तरह कुछ करना चाहिए यकीन नहीं है इसके बनाया था।

उत्तर

84

जावास्क्रिप्ट में, सबसे functions दोनों प्रतिदेय और instantiable हैं: वे दोनों एक [[Call]] और [[Construct]] आंतरिक तरीकों की है।

कॉल करने योग्य ऑब्जेक्ट्स के रूप में, आप उन्हें कॉल करने के लिए ब्रांड्स का उपयोग कर सकते हैं, वैकल्पिक रूप से कुछ तर्क पारित कर सकते हैं। कॉल के परिणामस्वरूप, फ़ंक्शन return a value कर सकता है।

var player = makeGamePlayer("John Smith", 15, 3); 

कोड कॉल ऊपर से काम makeGamePlayer और दुकानों चर player में दिए गए मान। इस मामले में, अगर आप इस तरह समारोह को परिभाषित करना चाहते हो सकता है:

function makeGamePlayer(name, totalScore, gamesPlayed) { 
    // Define desired object 
    var obj = { 
    name: name, 
    totalScore: totalScore, 
    gamesPlayed: gamesPlayed 
    }; 
    // Return it 
    return obj; 
} 

साथ ही, जब आप एक समारोह आप भी हुड, जो समारोह के अंदर this के मूल्य को निर्धारित तहत एक अतिरिक्त तर्क से गुजर रहे हैं कहते हैं। उपर्युक्त मामले में, makeGamePlayer को विधि के रूप में नहीं कहा जाता है, this मान मैला मोड में वैश्विक वस्तु होगी, या सख्त मोड में अपरिभाषित होगा।

रचनाकारों के रूप में, आप उन्हें तत्काल करने के लिए new operator का उपयोग कर सकते हैं।

  1. एक नई वस्तु जो निर्माता
  2. की .prototype से विरासत बनाता निर्माता this के रूप में इस वस्तु गुजर कॉल: इस ऑपरेटर [[Construct]] आंतरिक विधि (कंस्ट्रक्टर्स में ही उपलब्ध) है, जो कुछ इस तरह करता है का उपयोग करता है मूल्य
  3. यह कन्स्ट्रक्टर द्वारा लौटाए गए मान को लौटाता है यदि यह एक वस्तु है, या अन्यथा चरण 1 पर बनाई गई वस्तु।
var player = new GamePlayer("John Smith", 15, 3); 

कोड ऊपर GamePlayer का एक उदाहरण बनाता है और चर player में दिए गए मान संग्रहीत करता है। इस मामले में, अगर आप इस तरह समारोह को परिभाषित करना चाहते हो सकता है:

function GamePlayer(name,totalScore,gamesPlayed) { 
    // `this` is the instance which is currently being created 
    this.name = name; 
    this.totalScore = totalScore; 
    this.gamesPlayed = gamesPlayed; 
    // No need to return, but you can use `return this;` if you want 
} 

परंपरा के मुताबिक, निर्माता के नाम एक अपरकेस पत्र के साथ शुरू करते हैं।

रचनाकारों का उपयोग करने का लाभ यह है कि उदाहरण GamePlayer.prototype से प्राप्त होते हैं। उसके बाद, आप गुण वहाँ परिभाषित कर सकते हैं और उन्हें उपलब्ध बनाने सभी उदाहरणों

+3

@OP यह भी ध्यान दें कि जब आप इसे 'नए' कीवर्ड से बुलाएंगे तो मैं पूंजी के साथ नाम शुरू करने का सुझाव दूंगा: 'MakeGamePlayer'। – PeeHaa

+2

@ ओरोल-अपने ऑब्जेक्ट को शाब्दिक जांचें, इसमें सिंटैक्स त्रुटियां हैं। – RobG

+3

@PeeHa अच्छी सलाह, कन्स्ट्रक्टर का उपयोग करते समय भी अधिक विशिष्ट नामकरण सम्मेलन 'नया गेमप्लेयर() 'होगा। –

29

आप इसे इस तरह बस इतना कर सकती है object literal साथ:

function makeGamePlayer(name,totalScore,gamesPlayed) { 
    return { 
     name: name, 
     totalscore: totalScore, 
     gamesPlayed: gamesPlayed 
    }; 
} 
2

में मैं उन दिशाओं ले जाएगा मतलब करने के लिए:, फेरबदल का एक स्पर्श के साथ

function makeGamePlayer(name,totalScore,gamesPlayed) { 
     //should return an object with three keys: 
     // name 
     // totalScore 
     // gamesPlayed 

     var obj = { //note you don't use = in an object definition 
      "name": name, 
      "totalScore": totalScore, 
      "gamesPlayed": gamesPlayed 
      } 
     return obj; 
    } 
+1

आपके पास वस्तु के अंदर अर्धविराम क्यों है? –

+0

@AlexG अच्छा पकड़, विश्वास नहीं कर सकता कि मैंने 4 साल में किसी और को नहीं किया क्योंकि मैंने पहली बार यह जवाब पोस्ट किया था। यह निस्संदेह ओपी की मूल वस्तु का एक बुरा कट-एन-पेस्ट जॉब था जिसे मैं और कुछ अन्य लोगों की तरह दिखता हूं। – scrappedcola

2

दोनों शैलियों, काम करेगा।

पहली विधि जावास्क्रिप्ट कन्स्ट्रक्टर का उपयोग करती है, जो कि अधिकांश चीजों की तरह पेशेवरों और विपक्ष है।

// By convention, constructors start with an upper case letter 
function MakePerson(name,age) { 
    // The magic variable 'this' is set by the Javascript engine and points to a newly created object that is ours. 
    this.name = name; 
    this.age = age; 
    this.occupation = "Hobo"; 
} 
var jeremy = new MakePerson("Jeremy", 800); 

दूसरी ओर, अपने अन्य विधि 'खुलासा बंद नमूना' अगर मैं सही ढंग से याद करते हैं कहा जाता है।

function makePerson(name2, age2) { 
    var name = name2; 
    var age = age2; 

    return { 
    name: name, 
    age: age 
    }; 
} 
+0

मुझे लगता है कि आप अपने पहले कोड उदाहरण में 'मेकपर्सन' कॉल से पहले एक नया भूल गए हैं। –

+0

@ मेट - तो मैंने किया। जोड़ा गया। धन्यवाद। –

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