对象文字JavaScript模式不识别对象变量

时间:2012-12-27 00:17:48

标签: javascript oop requirejs

我正在尝试使用套接字创建一个javascript游戏,但我陷入了对象的OOP。我在从对象的函数内部引用对象的变量时遇到了问题。

这里可能有几个问题。我从对象内部调用绘制函数而不是渲染函数。我也不确定对象文字设计是否正确完成。

使用Require.js和class.js,我们有User.js:

    define(['entity'],function(Entity){
var User = Entity.extend({
    init: function(){
        this.health= 10;

    },

    draw: function(ctx){
        img = new Image();   // Create new img element
        img.onload = function(){
        // execute drawImage statements here
        ctx.drawImage(img, this.posx, this.posy);
        };
        img.src = '/images/object.PNG'; // Set source path
    }
})
return User;})

从Entity.js扩展

    define(function(){
var Entity= Class.extend({
    init: function(){
        //object image
        this.img.src = '/images/Blue-soldier.PNG';
        //location
        this.posx=50;
        this.posy=50;
        //gameplay values
        this.health=1;
        this.speed=0;

    },

在game.js中调用User.draw(ctx):

    var entity = new User;
    this.users.push(entityid);
    entity.draw(ctx);
},

在user.draw()中无法识别This.posx和this.posy。当它们被硬值替换时,它可以正常工作。我错过了什么?

我的完整代码更令人困惑,但您可以在https://github.com/mtbarta/canvas/blob/master/public/javascripts/client.js

找到它

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是你试图在“加载”处理程序中使用this,其中的值不是“draw”函数中的值。试试这个:

    var entity = this;
    img.onload = function(){
      // execute drawImage statements here
      ctx.drawImage(img, entity.posx, entity.posy);
    };

通过在局部变量“entity”中保留this的副本,处理程序可以访问它。