javascript对象语法

javascript对象语法,javascript,canvas,Javascript,Canvas,我正在尝试学习如何使用javascript对象,但遇到了一些问题 var playerImg = new Image(); playerImg.src = 'player_stay.png'; var player = { posX: 50, posY: 50, draw: function(){ ctx.drawImage(playerImg, player.posX, player.posY); } } 是否可以将playerImg

我正在尝试学习如何使用javascript对象,但遇到了一些问题

var playerImg = new Image();
    playerImg.src = 'player_stay.png';

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    }
}
是否可以将playerImg插入玩家对象? 类似于player.img的东西

编辑: 我可以这样做

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        playerImg = new Image();
        playerImg.src = 'player_stay.png';
        ctx.drawImage(playerImg, player.posX, player.posY);
    }
}
但我认为它会创造新的形象();当我使用player.draw()时; 因此,我想知道是否有更好的方法来实现这一点,并将所有参数都放在播放器对象中?

是的,为什么不:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    },
    playerImage: playerImg
}
是的,这是可能的

通常,可以有嵌套对象或列表,如下所示:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(playerImg, player.posX, player.posY);
    },
    playerImage:{
                 src = 'player_stay.png'
                 },
   playerList:['elem1', 'elem2']
}
要在代码中引用它,只需编写(值赋值示例)

这个链接可以提供一些帮助

如果我理解正确,您不希望在
播放器
对象的外部/之前构建
播放器
对象

这是一种方法,但我不推荐它,因为它不太可读:

var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(player.img, player.posX, player.posY);
    },
    img: (function(){
        var playerImg = new Image();
        playerImg.src = 'player_stay.png';
        return playerImg;
    })()
}
这个构造
(function(){})()称为自执行/自调用匿名函数,或


顺便说一句:当构建播放器对象时,此表达式只执行一次,因此您不必担心重复创建图像。

您尝试过吗?你做的时候发生了什么?不是我想要的。我在播放器对象外部创建图像,但我希望所有图像都在播放器对象内部。
playerImage
不是一个普通的javascript对象。它是一个
图像
var player = {
    posX: 50,
    posY: 50,
    draw: function(){
        ctx.drawImage(player.img, player.posX, player.posY);
    },
    img: (function(){
        var playerImg = new Image();
        playerImg.src = 'player_stay.png';
        return playerImg;
    })()
}