1

私は次のplayerようにオブジェクトを宣言するゲームを作成しています:

var player = {
    "id": "player",
    "displayText" : "<img src = 'http://3.bp.blogspot.com/-kAhN0HX-MBk/T_5bApfhbJI/AAAAAAAAAuI/lUww8xT9yV8/s1600/smileys_001_01.png'" +
    "class='onTop' id='" + this.id + "' alt='you' border='0' />" + 
    "<div id = '" + this.id + "health' class = 'healthLost hide'></div>",
};

しかし、 でplayer.displayTextthis.idを返してundefinedいます。なぜ、これを修正するにはどうすればよいですか?

4

4 に答える 4

2

オブジェクトリテラルの作成中に現在のスコープを変更しないので、そうthisではないと思います。

代わりにオブジェクトを作成します:

function Player(id) {
    this.id = id;
    this.displayText = "<img src = 'http://3.bp.blogspot.com/-kAhN0HX-MBk/T_5bApfhbJI/AAAAAAAAAuI/lUww8xT9yV8/s1600/smileys_001_01.png'" +
        "class='onTop' id='" + this.id + "' alt='you' border='0' />" +
        "<div id = '" + this.id + "health' class = 'healthLost hide'></div>";
}

var p = new Player('foo');
于 2013-09-01T05:50:11.047 に答える
1
var player = {
    "id": "player",
    "displayText" : "<img src = 'http://3.bp.blogspot.com/-kAhN0HX-MBk/T_5bApfhbJI/AAAAAAAAAuI/lUww8xT9yV8/s1600/smileys_001_01.png'" +
    "class='onTop' id='" + player.id + "' alt='you' border='0' />" + 
    "<div id = '" + player.id + "health' class = 'healthLost hide'></div>",
};

「this」は使用できません..グローバルオブジェクト(ブラウザの「ウィンドウ」など)にバインドされているため..オブジェクトの名前がわかっている場合は.. objectName.this ..

上記の player.id を使用して問題を修正しました。

于 2013-09-01T05:49:50.170 に答える
1

このようなものを取得するには、クラスを関数としてセットアップする必要があります。これを試して:

var player_class = function(){
    this.id = "player"
    this.displayText = "<img src = 'http://3.bp.blogspot.com/-kAhN0HX-MBk/T_5bApfhbJI/AAAAAAAAAuI/lUww8xT9yV8/s1600/smileys_001_01.png'" +
    "class='onTop' id='" + this.id + "' alt='you' border='0' />" + 
    "<div id = '" + this.id + "health' class = 'healthLost hide'></div>";
}

var player = new player_class();

これについては、Mozilla のドキュメントを参照してください。

于 2013-09-01T05:49:55.140 に答える