在我初始化canvas对象时保留上下文引用是否更好

时间:2017-02-18 16:13:10

标签: javascript html5 html5-canvas

在初始化画布对象时保留上下文引用是否更好..

var Obj1 = 
{
    Init: function(ctx)
    {
        this.Ctx = ctx;
    },

    Draw: function()
    {
        this.Ctx.drawImage(img, x, y, width, height);
    }
};

或者,为每次通话使用上下文是否更好?

var Obj2 = 
{
    Init: function()
    {

    },

    Draw: function(ctx)
    {
        ctx.drawImage(img, x, y, width, height);
    }
};

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果上下文是一个全局变量,那么以Javascript访问它的时间很小,必须搜索原型树才能找到它。在这种情况下,如果函数使用它超过两次,那么传递它可以提高性能。

如果您将它作为对象的属性,那么如果您传递它,则会有一个小的(非常小的)时间惩罚,而不是通过this.

访问它

你也可以关闭它

const myObject = (function(){
    var ctx; // as closure variable
    return {
        init(){
           ctx = canvas.getContext("2d");
        },
        drawSomething(){
           ctx.drawImage(image,0,0);
        }
    }
}());

在Javascript的某些实现上哪个是最快的,但是这个差异非常小,只会变成一个因素,具体取决于它的使用频率和使用之间的代码量。

最后,它是个人风格,以及决定如何访问此类变量/属性的用法。

答案 1 :(得分:0)

取决于您是否要始终将它们绘制到相同的上下文中。如果没有在每次通话时传递上下文。如果它相同则保持参考。