Pouze tento týden sleva až 80 % na e-learning týkající se Javy. A zároveň využij akce až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme koordinátorku kurzů a programátora, 100% home office, 100% flexibilní. Prozkoumej aktuální pozice
Java week

Diskuze: Metoda objektu nenajde vlastnost objektu

Aktivity
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Patrik Valkovič
Člen IT Redactor Gang
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í
+1 bodů
Ř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
Drahomír Hanák
Redaktor
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.