[解決済み] JavaScript: オブジェクトを返す関数
質問
私は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
演算子
を使用してインスタンス化します。この演算子では
[[構築]]です。
内部メソッド(コンストラクタでのみ利用可能)で、次のような処理を行います。
-
を継承した新しいオブジェクトを作成します。
.prototype
コンストラクタの -
このオブジェクトを引数としてコンストラクタを呼び出します。
this
値 - オブジェクトであればコンストラクタが返す値を、そうでなければステップ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
. そして、そこでプロパティを定義して、すべてのインスタンスで利用できるようにすることができます。
関連
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み】Vueが定義されていない
-
[解決済み】module.exports "モジュールが定義されていません"