1

私はJqueryとJavascriptに非常に慣れていません。サイトで質問に対する回答を検索しようとしましたが、回答を見つけるために正しい用語を使用しているかどうかさえわかりません。すでに回答がある場合は、リンクをいただければ幸いです。

私の質問: HTML、CSS、Jquery、Javascript を使用してモバイル アプリを構築しています。インタラクティブなCYOAタイプのゲーム/アプリです。次の関数を使用して、プレーヤーに名前を入力させました。

<script> //to get player's name and use through out the game
function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
if (player!=null)
    {
    x= " " + player + ", Please wait while the system updates your work orders";
    document.getElementById("logon").innerHTML=x;
    }
}
</script>

私がやりたいことは、ゲーム全体でユーザーの名前を配置できるようにすることです。しかし、プレイヤーが最初にプロンプ​​ト ボックスに自分の名前を入力すると、どうすればよいかわかりません。

どんな助けでも大歓迎です。ありがとうございました

4

10 に答える 10

5

アプリケーション全体に対して単一のグローバル名前空間を作成し、関連する値をそこに配置します。

var MyApp = {};

MyApp.playerName = function () {
    var x;
    MyApp.player=prompt("Please enter your name");
    if (MyApp.player!=null) {
        x= " " + MyApp.player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}

playerName()の呼び出しをに変更する必要がありますMyApp.playerName()

于 2013-04-23T20:43:56.583 に答える
4

変数が関数の外部で定義されている限りplayer(値は関数から返されるため、ここにあります)、グローバルスコープを持ちます(次のようにしてこれを達成することもできます)。キーワードを省略すると、変数が定義されている場所に関係なくvarグローバルスコープになります):

function playerName(){
    var name = prompt('What is your name?'),
        x;
    if (player) {
        x = " " + name + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    return name;
}
var player = playerName;
于 2013-04-23T20:41:53.613 に答える
2

playerこれを提案するためにシャッターを切りますが、変数をグローバルにすることができます。

var player;

function playerName () {
    var x;
    player=prompt("Please enter your name");
    if (player!=null) {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}
于 2013-04-23T20:40:09.527 に答える
1

次のようにスコープを設定することで、グローバル化を回避できます。

(function() {
    var player;
    function playerName ()
    {
        var x;
        player=prompt("Please enter your name");
        if (player!=null)
        {
            x = " " + player + ", Please wait while the system updates your work orders";
            document.getElementById("logon").innerHTML=x;
        }
    }   
})();

player 変数は、最も外側の関数宣言内に記述したコードからアクセスできるようになりました (ただし、グローバルにはアクセスできません)。

于 2013-04-23T20:42:03.743 に答える
0

関数の外にグローバル変数を作成します。

var player='';

次に、関数から設定できます:

function myFunction(){ player='new name'; }

またはそれを読んでください:

function myOtherFunction(){ console.log(player) }
于 2013-04-23T20:41:47.683 に答える
0

あなたが直面しているのはvariable scopeです。変数は、{}宣言されているブロック (ブレースを考えてください) からのみ表示されます。

ただし、 など、すでに外側のスコープにある他の変数にアクセスすることもできますwindow。例を示します。

alert(foo); // undeclared
alert(window.bar); // undeclared--so far...

function foo(){
  var foo = "foo";
  window.bar = "bar";

  alert(foo); // works -- "foo";
  alert(window.bar); works -- "bar";
}

alert(foo); // undeclared
alert(window.bar); // undeclared (still, haven't called foo() yet)

foo();
alert(window.bar); // "bar" (now it works)

これは、関数の名前や他の種類の参照にも適用されますが、このような場合、関数から値を返すことができ、グローバル変数の使用を避けることができます。

于 2013-04-23T20:42:45.297 に答える
0

ウィンドウ レベルでグローバル変数を定義することは、通常、jQuery でこれを行う方法です。この場合は "window.player" です。技術的には、「var」を省略するだけでこれをグローバルにすることができますが、お勧めしません。

于 2013-04-23T20:44:18.213 に答える
0

playerおそらく、次のようなオブジェクトを作成するだけで十分でしょう。

var player = {};

他の関数の外側で、それをアプリケーションに入れます。次に、プレイヤーの名前などの値を設定する必要がある場合は、これを関数に入れます。

player.name = prompt("Please enter your name");

このようにして、そのデータにアクセスできますが、グローバルを使用する必要はありません。これは、varキーワードなしで作成され、かなり悪い形式と広く考えられている変数です。

于 2013-04-23T20:48:00.170 に答える
0

変数 x を他の関数とスクリプト全体で使用するには、グローバルにすることができます。関数内で変数をグローバルにするには、次のようにします。

<script>
function foo() {
    window.newGlobalVariable = 'moo';
}
</script>

たとえば、コードで:

<script> //to get player's name and use through out the game
function playerName (){

    widnow.x;
    widnow.player=prompt("Please enter your name");
   if (player!=null){
       x= " " + player + ", Please wait while the system updates your work orders";
       document.getElementById("logon").innerHTML=x;
   }
}
</script>
于 2013-04-23T20:51:13.143 に答える
-1

別の解決策 (確かに最善ではない) はplayerName、関数のプロパティを作成することです。これにより、グローバル スコープを汚染することなく公開されます。JS のオブジェクトとしての関数の機能をデモンストレーションするだけです。

function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
    if (player!=null)
    {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    playerName.player = player;
}
于 2013-04-23T20:54:37.253 に答える