LINUX.ORG.RU

Где находится функция stroke из канвас?

 ,


0

1

решил поэкспериментировать с Proxy



canvas = new Proxy({
   testVar: 100,
   test: function(n){return n + this.testVar},
   canvas: document.createElement("canvas"),
   //stroke: function(){return this.canvas.getContext("2d").stroke()} // если это раскомментировать -- работает
},
{

  get: function(target, message){
     var context, object
     switch(true) {
       case message in target: context = target; break
       case message in target.canvas.style:  context = target.canvas.style; break
       case message in target.canvas.getContext("2d"): context = target.canvas.getContext("2d"); 
     }

     if(!context) return
     object = context[message] 
     if(typeof object !== "function") return object
     return function(){return object.apply(context, arguments)}
  },
  set: function(target, message, value){
     var context
     switch(true) {
       case message in target: context = target; break
       case message in target.canvas.style:  context = target.canvas.style; break
       case message in target.canvas.getContext("2d"): context = target.canvas.getContext("2d"); 
     }

     if(!context) return
     return context[message] = value
  }
 
  
})

console.log( canvas.test(10) ) // just test

document.body.appendChild(canvas.canvas)
canvas.border = "2px solid black"
canvas.moveTo(0, 0)
canvas.lineTo(10, 10)
canvas.stroke()


Фича эта выглядит очень многообещающе. Кратко о коде. Смысл такой, что ищется поле в 3-х объектах, то есть, это типа объединение, чтобы не писать лишней лапши, eg вместо canvas.canvas.style.border = "foo bar baz" canvas.border = "foo bar baz". Все работает, кроме последней строки. Пишет что stroke is not a function. Кажись там пустая строка. Собственно непонятно, почему moveTo и lineTo нормально находит, а stroke — нет? C костылем который закомментирован в таргет работает, но это фигня, если так писать, придется все проверять, профит теряется.

ЗЫ тестил на FF и хроме на XP



Последнее исправление: currency2017 (всего исправлений: 1)

Родина дала тебе интерактивную консоль, интроспекцию - отлаживай, отлаживай код! Не хочу, хочу создавать тупые треды на лоре! Что такое? Это джаваскрипт? Это джаваскрипт?!

> 'stroke' in document.createElement("canvas").style
true
NeXTSTEP ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.