জাভাস্ক্রিপ্ট: ফাংশন একটি বস্তু ফিরে


90

আমি codecademy.com এ কিছু জাভাস্ক্রিপ্ট / jQuery পাঠ নিচ্ছি। সাধারণত পাঠগুলি উত্তর বা ইঙ্গিত সরবরাহ করে তবে এর জন্য এটি কোনও সহায়তা দেয় না এবং আমি নির্দেশাবলীর দ্বারা কিছুটা বিভ্রান্ত হয়েছি।

এটি ফাংশনটি Make-GamePlayer তিনটি কী দিয়ে একটি বস্তু ফেরত তৈরি করতে বলে।

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

বস্তুর তৈরি হওয়ার পরে আমাকে তার বৈশিষ্ট্যগুলি পরিবর্তন করতে সক্ষম হতে হবে।

উত্তর:


145

জাভাস্ক্রিপ্টে, বেশিরভাগ ফাংশন উভয়ই কলযোগ্য এবং তাত্ক্ষণিক: তাদের উভয় একটি [[কল]] এবং [[গঠন]] অভ্যন্তরীণ পদ্ধতি উভয়ই রয়েছে ।

কলযোগ্য বস্তু হিসাবে, আপনি তাদের কল করার জন্য বন্ধনী ব্যবহার করতে পারেন, কিছু যুক্তি পাস করে passing কলের ফলস্বরূপ, ফাংশনটি একটি মান ফেরত দিতে পারে

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
PeeHaa

4
@ পেহাহা ভাল পরামর্শ, কনস্ট্রাক্টর ব্যবহার করার সময় আরও সাধারণ নামকরণের সম্মেলন হবে new GamePlayer()
ম্যাট জিউনার্ট

@ রবজি ধন্যবাদ, আমি যখন কোডটি গভীরভাবে না দেখে কপি-পেস্ট করি তখন তা ঘটে।
ওরিওল

48

আক্ষরিক অবজেক্টের সাহায্যে আপনি এটি সহজভাবে করতে পারেন :

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

4
হ্যালো, আপনি কীভাবে রিটার্নের বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারবেন, যখন আমি MakeGamePlayer.name ব্যবহার করি তবে এটি কাজ করে না
iKamy

4
var প্লেয়ার 1 = MakeGamePlayer ("ববি ফিশার", 15, 5); প্লেয়ার 1.নাম;
মৃতার্থল

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);

অন্যদিকে, আপনার অন্য পদ্ধতিটি যদি আমি সঠিকভাবে স্মরণ করি তবে তাকে 'প্রকাশক বন্ধের ধরণ' বলা হয় is

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

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

যাকে "প্রকাশিত মডিউল প্যাটার্ন" বলা হয় তবে এটি সাধারণত ব্যক্তিগত বন্ধের মধ্যে আবৃত থাকে (ফাংশন () {রিটার্ন {}}) ()
ফিলিপ কুইরিস

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

4
আপনি কেন বস্তুর ভিতরে অর্ধবৃত্তাকার আছে?
অ্যালেক্স জি

@ অ্যালেক্সজি দুর্দান্ত ক্যাচ, আমি এই উত্তরটি পোস্ট করার পরে 4 বছরে আর কেউ করেনি বিশ্বাস করতে পারে না। নিঃসন্দেহে এটি ওপির মূল অবজেক্টের একটি খারাপ কাট-এন-পেস্ট কাজ ছিল যা আমি এবং এটি অন্য কয়েকজনের মতো দেখায়।
স্ক্র্যাপকোলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.