Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый Вчера, 15:17
Аспирант
Отправить личное сообщение для provigator Посмотреть профиль Найти все сообщения от provigator
 
Регистрация: 20.01.2017
Сообщений: 33

оптимизация кода javaScript
здравствуйте
я рисую в канвасе:
canvas=document.getElementById("canvas"); c=canvas.getContext("2d")
c.clearRect(0, 0, 1400, 150); c.beginPath(); c.moveTo(0, 0); c.lineTo(0, 100); c.stroke()
чтобы обращаться к процедурам рисования всегда приходится писать имя канваса c.
можно как-то сделать канвас с. "активным" чтобы рисовать без обращения к имени с. ??
clearRect(0, 0, 1400, 150); beginPath(); moveTo(0, 0); lineTo(100, 100); stroke()

Последний раз редактировалось provigator, Вчера в 15:53.
Ответить с цитированием
  #2 (permalink)  
Старый Вчера, 16:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,609

Можно, но не нужно. Никто вас не поблагодарит.

Вариант 1(deprecated, не работает в strict mode):
with(c) {
  clearRect(0, 0, 1400, 150); 
  beginPath(); 
  moveTo(0, 0); 
  lineTo(100, 100); 
  stroke()
}


Вариант 2(без возможности присвоения, типа fillColor='#xxx', только c.fillColor='#xxx'):
function bindProxy(obj) {
  return new Proxy(obj, {
    get(target, key, r) {
      const value = Reflect.get(target, key, r);
      if (typeof value === 'function')
        return value.bind(target);
      return value;
    }
  })
}


const { clearRect, beginPath, moveTo, lineTo, stroke } = bindProxy(c);

clearRect(0, 0, 1400, 150); 
beginPath(); 
moveTo(0, 0); 
lineTo(100, 100); 
stroke()


Если очень хочется, то лучше воспользоваться вспомогательный библиотекой для рисования, коих мнжество на любой вкус. Плюсом будут всякие иные удобности.
__________________
29375, 35

Последний раз редактировалось Aetae, Вчера в 16:47.
Ответить с цитированием
  #3 (permalink)  
Старый Вчера, 23:18
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,780

Сообщение от Aetae Посмотреть сообщение
без возможности присвоения, типа fillColor='#xxx', только c.fillColor='#xxx'):
Можно такие значения оформить как функции типа get/set
strokeStyle('#ff0000');
const ss = strokeStyle();


<body>
  <canvas id="canvas"></canvas>
  <script>
    const canvas = document.getElementById("canvas");
    const ctx = canvas.getContext("2d");

    function bindProxy(obj) {
      return new Proxy(obj, {
        get(target, key, r) {
          const targetproto = Object.getPrototypeOf(target);
          const value = Reflect.getOwnPropertyDescriptor(targetproto, key).value;
          //const value = Reflect.get(target, key, r);
          if (value && typeof value === 'function') {
            return value.bind(target);
          } else {
            const pget = Reflect.getOwnPropertyDescriptor(targetproto, key).get;
            const pset = Reflect.getOwnPropertyDescriptor(targetproto, key).set;
            if (pget && typeof pget === 'function') {
              if (pset && typeof pset === 'function') {
                return function (v) {
                  if (arguments.length === 0) return target[key];
                  target[key] = v;
                };
              } else {
                return function (v) {
                  return target[key];
                };
              }
            } else if (pset && typeof pset === 'function') {
              return function (v) {
                target[key] = v;
              };
            }
          }
          return value;
        }
      });
    }

    const { clearRect, strokeStyle, beginPath, moveTo, lineTo, stroke } = bindProxy(ctx);

    clearRect(0, 0, 1400, 150);
    strokeStyle('#ff0000');
    console.log(strokeStyle());
    beginPath();
    moveTo(0, 0);
    lineTo(100, 100);
    stroke()
  </script>
</body>
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода Alexander Belov jQuery 10 01.04.2016 21:46
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Оптимизация JavaScript в 10-20 раз, фантастика? А вот нет!! m4gz Общие вопросы Javascript 19 26.03.2012 16:19
Сравнительное тестирование производительности JavaScript кода c0deMaster Библиотеки/Тулкиты/Фреймворки 3 17.05.2011 15:11
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40