1. ホーム
  2. javascript

[解決済み] JavaScript: オブジェクトを返す関数

2022-03-09 16:23:33

質問

私はcodecademy.comでJavaScript/jQueryのレッスンを受けています。通常、レッスンでは答えやヒントが提供されますが、このレッスンではヘルプが提供されず、指示で少し混乱しています。

関数makeGamePlayerは3つのキーを持つオブジェクトを返すようにと書いてあります。

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

オブジェクトを作成した後、そのプロパティを変更できるようにする必要があります。

解決方法は?

JavaScriptでは、ほとんどの 関数 は、呼び出し可能かつインスタンス化可能です。 [[呼び出し]]です。 [構築]] の内部メソッドです。

呼び出し可能なオブジェクトとして、括弧を使用して呼び出すことができ、オプションでいくつかの引数を渡すことができます。呼び出した結果、その関数は以下のことが可能になります。 値を返す .

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 . そして、そこでプロパティを定義して、すべてのインスタンスで利用できるようにすることができます。