2017-02-18 8 views
0

は、私は私のキャンバスオブジェクトを初期化していたときに、それはより良いコンテキストの参照を維持することですオブジェクト..は、私は私のキャンバスを初期化していたときに、それはより良いコンテキストの参照を維持することです

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); 
    } 
}; 

ありがとうございます。

+0

各コールのコンテキストを渡します。 (何もパフォーマンスの差を生むことはない) – m87

+0

@ siam彼はなぜこれを行うべきなのかを説明するために気をつけていますか? – Andreas

+0

個人的な意見ですので、コメントしました。もし私が気にしていたら、答えとして投稿しておく必要があります.w/explainaton:P – m87

答えて

1

コンテキストがグローバル変数である場合、Javascriptはプロトタイプツリーを検索してそれを見つける必要があるため、アクセスに時間がかかることがあります。その場合、関数が2回以上使用すると、それを渡すことでパフォーマンスが向上します。

あなたがオブジェクトのプロパティとしてそれを持っている場合は、それを渡すと(非常に小さい)短い時間ペナルティが、それはあなたがそれ

const myObject = (function(){ 
    var ctx; // as closure variable 
    return { 
     init(){ 
      ctx = canvas.getContext("2d"); 
     }, 
     drawSomething(){ 
      ctx.drawImage(image,0,0); 
     } 
    } 
}()); 
以上も閉じることができます this.

経由ではなくアクセスよりも、そこにあります

Javascriptの実装によっては最も速いですが、その違いは非常に小さく、使用頻度や使用量に応じて変化します。

最後に、それは個人的なスタイルであり、そのような変数/プロパティへのアクセス方法が決まります。

0

常に同じコンテキストに描画するかどうかによって異なります。そうでない場合は、各呼び出しでコンテキストを渡します。同じ場合は、参照を保持します。

関連する問題

 関連する問題