未捕获的TypeError:无法读取未定义的属性'canvas' - Javascript对象

时间:2015-11-01 10:42:38

标签: javascript jquery canvas javascript-objects

我对如何使用,定义,更改和取消设置javascript对象感到困惑。

我的javascript对象是:

var Ship = function(){
    return {
        canvas: $('#area')[0],
        canvas_width: this.canvas.width,
        canvas_height: this.canvas.height,
        context: this.canvas.getContext("2d"),
        ship_image: new Image(),
        ship_width: null,
        ship_height: null,
        ship_x: 0,
        ship_y: 0,
        init: function() {
            this.ship_image.onload = function() {
                this.ship_width = this.width;
                this.ship_height = this.height;
                this.ship_x = (this.canvas_width / 2) - (this.ship_width / 2);
                this.ship_y = this.canvas_height - this.height;

                this.draw(
                    this.ship_x,
                    this.ship_y
                );
            }

            this.ship_image.src = "ship.gif";
        },
        draw: function(x, y) {
            this.context.drawImage(
                this.ship_image,
                x,
                y
            );
        }
    }
}();

当我执行这样的代码时,

$(function(){
    Ship.init();
    Controller.init();
});

我每次都会收到此错误。

  

未捕获的TypeError:无法读取第4行(ship.js)上未定义的属性'width'

     

未捕获的TypeError:Ship不是第29行的函数   (index.html / Ship.init())

我现在该怎么办?

1 个答案:

答案 0 :(得分:4)

问题是this.canvas没有指向对象canvas的{​​{1}}属性,它指向全局对象ship。您需要不同地初始化window,例如在init函数中。与canvas_width

相同
context