Diskuze: Metoda objektu nenajde vlastnost objektu

JavaScript JavaScript Metoda objektu nenajde vlastnost objektu

Avatar
Denis Homolík (Alfonz):

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
Vše je možné, dokud si to myslíte!
Avatar
Peas
Člen
Avatar
Odpovídá na Denis Homolík (Alfonz)
Peas:

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
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Denis Homolík (Alfonz)
patrik.valkovic:

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
Tým ITnetwork
Avatar
Odpovídá na Denis Homolík (Alfonz)
Drahomír Hanák:
window.addEventListener('resize', canvasMan.resize.bind(canvasMan), true);

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

 
Nahoru Odpovědět  +1 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.