導入: プレイヤーが兵士の集団を操作して敵を攻撃できる戦略戦争ゲームを作っていると想像してください。 このゲームの「兵士を作る」部分に焦点を当ててみましょう。 兵士は、以下に示すように、コンピューター内の一連の属性によって表現されます。 1. 例次のようにして兵士を作成できます。 var 兵士 = { ID: 1, // 各兵士のタイプを区別するために使用されます: "アメリカ兵"、 攻撃力: 5, HP:42, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } 兵舎。製造(兵士) 2. 兵士100人を作成する100 人の兵士を作成する必要がある場合はどうしますか? 100 回ループしてみましょう: var 兵士 = [] var 兵士 for(var i=0; i<100; i++){ 兵士 = { ID: i, // ID は繰り返すことができません。兵士: "アメリカ兵", 攻撃力: 5, HP:42, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } 兵士.push(兵士) } 兵舎。大量生産(兵士) 3. 質問上記のコードには問題があり、大量のメモリが浪費されています。
4. 改善点以前のコラム記事(JSプロトタイプチェーン)を読んだ人は、プロトタイプチェーンが繰り返し作成の問題を解決できることを知っているはずです。まず「兵士プロトタイプ」を作成し、次に「兵士」の var 兵士プロトタイプ = { 紋章:「アメリカ兵」 攻撃力: 5, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } var 兵士 = [] var 兵士 for(var i=0; i<100; i++){ 兵士 = { ID: i, // IDは重複不可 ライフ値: 42 } /*__proto__ は標準属性ではないため、実際の作業ではこれを記述しないでください*/ Soldier.__proto__ = Soldier プロトタイプ Soldiers.push(Soldier) } 兵舎。大量生産(兵士) 5. エレガント?兵士を作成するためのコードを 2 か所に配置するのはエレガントではないと指摘されたので、関数を使用して 2 つの部分を接続します。 関数soldier(ID){ var 一時オブジェクト = {} 一時オブジェクト.__proto__ = soldier.prototype 一時オブジェクト.ID = ID 一時オブジェクト.ライフ値 = 42 一時オブジェクトを返す} 兵士.プロトタイプ = { 紋章:「アメリカ兵」 攻撃力: 5, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } // ファイルとして保存: soldier.js 次に、「Soldier」を参照して兵士を作成します。 var 兵士 = [] (var i=0; i<100; i++){ 兵士.push(兵士(i)) } 兵舎。大量生産(兵士) 6. JSの父からのケアJS の作成者は、より少ないコード行を記述できる 兵士の前に
7. 今回はnewを使って書きます関数soldier(ID){ this.ID = ID 健康 = 42 } 兵士.プロトタイプ = { 紋章:「アメリカ兵」 攻撃力: 5, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } // ファイルとして保存: soldier.js 次に兵士を作成します(新しいキーワードを追加します)。 var 兵士 = [] (var i=0; i<100; i++){ 兵士.push(新しい兵士(i)) } 兵舎。大量生産(兵士) new の目的は、コードを数行節約することです。 (糖衣構文とも呼ばれる) 8. コンストラクタ属性に注意する「どの関数が一時オブジェクトを作成したか」を記録するために、 兵士.プロトタイプ = { コンストラクター: Soldier} 「 Soldier.prototype.ArmyType = "アメリカ兵" 兵士.プロトタイプ.攻撃 = 5 Soldier.prototype.walk = function(){ /*2歩歩くためのコード*/ Soldier.prototype.run = function(){ /*実行コード*/ } soldier.prototype.death = function(){ /*死んでください*/ } Soldier.prototype.attack = function(){ /*彼のクマの顔をブラッシングする*/ } Soldier.prototype.defense = function(){ /*顔を保護する*/ } または、 兵士.プロトタイプ = { コンストラクター: 兵士、 紋章:「アメリカ兵」 攻撃力: 5, 歩行: function(){ /*2歩歩くコード*/, 実行: function(){ /*コードを実行中*/ }, 死: function(){ /*死ぬ*/ }, 攻撃: function(){ /* クマの顔を撫でる */ }, 防御: function(){ /*顔を守る*/ } } これで、JS における new の役割に関する詳細な記事は終了です。JS における new の役割の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Dockerイメージの作成Dockerfileとコミット操作
この効果を実現するには、まず CSS のプロパティを知っておく必要があります。 text-shado...
目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...
目次序文1. 概要2. 読み取りと書き込みの分離3. MySQL マスタースレーブレプリケーションの...
プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...
ウェブサイトのフロントエンド開発で発生するセキュリティ問題は、クライアントブラウザで実行されるコード...
スタイルシートの最も重要な機能の 1 つは、ページ、画面、電子シンセサイザーなどの複数のメディアに適...
リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...
React で国際化を実現するにはどうすればよいでしょうか? react-intlプラグインは、Re...
前面に書かれた過去および現在のプロジェクトで最も一般的に使用されているリレーショナル データベースは...
1. はじめにOracle が MySQL 8.0GA をリリースしました。海外での GA はリリー...
目次インストール構成よくある間違い事前テスト作業依存関係の扱いインスタンスとDOMを生成する要約する...
コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...
コンセプトMMM (Mysql のマスター マスター レプリケーション マネージャー) は、Perl...
/***************** * proc ファイルシステム***************...
コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...