जावास्क्रिप्ट: किसी वस्तु को लौटाने वाला कार्य


85

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

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

//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;
          }
    }

मुझे इसके बनने के बाद वस्तु के गुणों को संशोधित करने में सक्षम होना चाहिए।

जवाबों:


143

जावास्क्रिप्ट में, अधिकांश फ़ंक्शन कॉल करने योग्य और त्वरित दोनों हैं: उनके पास एक [[कॉल]] और [[निर्माण]] आंतरिक तरीके हैं।

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

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ऑपरेटर का उपयोग उन्हें इंस्टेंट करने के लिए कर सकते हैं। यह ऑपरेटर [[निर्माण]] आंतरिक विधि (केवल निर्माणकर्ताओं में उपलब्ध) का उपयोग करता है, जो कुछ इस तरह करता है:

  1. एक नई वस्तु बनाता है जो .prototypeकंस्ट्रक्टर से विरासत में मिली है
  2. इस ऑब्जेक्ट को thisमान के रूप में पास करने वाले कंस्ट्रक्टर को कॉल करता है
  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। फिर, आप वहां गुणों को परिभाषित कर सकते हैं और उन्हें सभी उदाहरणों में उपलब्ध करा सकते हैं


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

3
@PeeHaa अच्छी सलाह, कंस्ट्रक्टर का उपयोग करते समय अधिक विशिष्ट नामकरण सम्मेलन भी होगा new GamePlayer()।
— मैट ज़्यूंटर्ट

@RobG थैंक्स, यही होता है जब मैं कॉपी-पेस्ट कोड को गहराई से देखे बिना।
— ओरोल सेप

47

आप बस एक वस्तु शाब्दिक के साथ इस तरह कर सकते हैं :

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

3
हैलो, आप रिटर्न प्रॉपर्टी कैसे एक्सेस कर सकते हैं, जब मैं MakeGamePlayer.name का उपयोग करता हूं तो यह काम नहीं करता है
— iKamy

1
var player1 = makeGamePlayer ("बॉबी फिशर", 15, 5); player1.name;
— mrturtle

5

दोनों शैलियों, एक स्पर्श के साथ, काम करेंगे।

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

 // 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
  };
}

"खुलासा मॉड्यूल पैटर्न" कहा जाता है, लेकिन यह आमतौर पर निजी क्लोजर (फ़ंक्शन () {वापसी {}}) ()
— फेलिप Quirós

3

ES2016 जावास्क्रिप्ट के साथ ऐसा करने का नवीनतम तरीका

let makeGamePlayer = (name, totalScore, gamesPlayed) => ({
    name,
    totalScore,
    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
आपके पास वस्तु के अंदर अर्धविराम क्यों हैं?
— एलेक्स जी।

@AlexG अच्छा पकड़, विश्वास नहीं कर सकता कि 4 साल में किसी और ने नहीं किया क्योंकि मैंने पहली बार इस उत्तर को पोस्ट किया था। यह निस्संदेह ओपी की मूल वस्तु का एक बुरा कट-एन-पेस्ट काम था जिसे मैं और यह कुछ अन्य लोगों की तरह दिखता है।
— स्क्रैपेडकोला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.