NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
alfonz
Člen
Avatar
alfonz:19.6.2015 21:39

Ahoj, rozhodl jsem se naučit OOP v JS, ale teď jsem narazil na problém. Chci si udělat jednoduchý objekt který bude měnit velikost plátna, když okno změní velikost. Bohužel, ale v metodě resize vzniká chyba, že vlastnost canvas neexistuje(is undefined).

var CanvasMan = function (canvas) {
    this.canvas = canvas;
};


CanvasMan.prototype.resize = function () {
    console.log(this.canvas);
    this.canvas.setAttribute("width", this.canvas.offsetWidth);
    this.canvas.setAttribute("height", this.canvas.offsetWidth);

    console.log(this.canvas.offsetWidth);
    console.log(this.canvas.offsetHeight);

    console.log("Resize");
};
Odpovědět
19.6.2015 21:39
lmao
Avatar
Peas
Člen
Avatar
Odpovídá na alfonz
Peas:20.6.2015 1:54

Cauko :). Keby si to skusil napr takto? :)
HTML:

<body>
<canvas id="CanvasId" width="800" height="600" style="border:1px solid #000000;"></canvas>
</body>

JS

var canvas = document.getElementById("CanvasId");

var canvasMan = {
  canvas: canvas,
  resize: resize
};

function resize() {
  console.log(this.canvas);
  this.canvas.setAttribute("width", this.canvas.offsetWidth);
  this.canvas.setAttribute("height", this.canvas.offsetWidth);

  console.log(this.canvas.offsetWidth);
  console.log(this.canvas.offsetHeight);

  console.log("Resize");
}

A ked potom zavolas

canvasMan.resize()

tak sa ti to resizne

Editováno 20.6.2015 1:55
 
Nahoru Odpovědět
20.6.2015 1:54
Avatar
Odpovídá na alfonz
Patrik Valkovič:20.6.2015 13:00

Předpokládám, že jsi použil tu metodu jako callback k eventu. To co vím tak není možné, musíš tu metodu zavolat přímo na tom objektu. To znamená, že k eventu vytvořít anonymní metodu, ve které teprve zavoláš metodu canvasMan.resize(). To by mělo fungovat.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
20.6.2015 13:00
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na alfonz
Drahomír Hanák:20.6.2015 16:20
window.addEventListener('resize', canvasMan.resize.bind(canvasMan), true);

Viz https://developer.mozilla.org/…unction/bind

 
Nahoru Odpovědět
20.6.2015 16:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.