2017-02-18 1 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 должен искать дерево прототипов, чтобы найти его. В этом случае, и если функция использует его более двух раз, то передача может улучшить производительность.

Если у вас есть как свойство объекта есть небольшой (очень маленький) штрафное время, если вы затем передать его, а не доступ к ней через this.

Вы также можете закрыть над ним

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

Какой из некоторых реализаций Javascript является самым быстрым, но опять же эта разница очень мала и только становится фактором в зависимости от того, как часто она используется и сколько кода существует между использованием.

В конце это персональный стиль и использование, которое определит, как вы получаете доступ к такой переменной/свойствам.

0

Зависит, если вы хотите нарисовать их всегда в том же контексте или нет. Если не передать контекст для каждого вызова. Если он будет таким же, сохраните ссылку.