Hallo,
versuche gerade mit ECMAScript 6, wo man (vermeintlich) einigermassen schön objektorientiert programmieren kann, wie man sich das in anderen Programmiersprachen gewohnt ist, auf die eigenen Klassenvariablen zuzugreifen.
Leider ist "this" in Javascript anders gelöst und zeigt immer auf den aktuellen namespace.
Verschiedenste Versuche im untenstehenden Code führten nicht zum Erfolg, auch nicht mit bind(). Hier ist das Problem wahrscheinlich, dass ich die Methode redraw von ausserhalb aufrufe.
Im Aufruf der Funktion redraw wird entweder svgMain, oder setAttribute() nicht erkannt.
Kann mir jemand sagen, wie ich in der Funktion redraw auf meine Klassenvariablen (z.B. svgMain) zugreifen kann?
versuche gerade mit ECMAScript 6, wo man (vermeintlich) einigermassen schön objektorientiert programmieren kann, wie man sich das in anderen Programmiersprachen gewohnt ist, auf die eigenen Klassenvariablen zuzugreifen.
Leider ist "this" in Javascript anders gelöst und zeigt immer auf den aktuellen namespace.
Verschiedenste Versuche im untenstehenden Code führten nicht zum Erfolg, auch nicht mit bind(). Hier ist das Problem wahrscheinlich, dass ich die Methode redraw von ausserhalb aufrufe.
Im Aufruf der Funktion redraw wird entweder svgMain, oder setAttribute() nicht erkannt.
Kann mir jemand sagen, wie ich in der Funktion redraw auf meine Klassenvariablen (z.B. svgMain) zugreifen kann?
Code:
classBaseChart { constructor(acontainer) { varcontainer=acontainer; varchartWidth=window.innerWidth; varchartHeight=window.innerHeight; varsvgMain=this.createSvgElement('svg', { style:'font-family: Arial, sans-serif;', width:600, height:500, fill:"yellow" }); container.appendChild(svgMain); svgMain.setAttribute("height", chartHeight-20); window.onresize=this.redraw(); } redraw() { chartHeight=window.innerHeight; svgMain.setAttribute("height", chartHeight); } createSvgElement(tag, attributes) { varelement=document.createElementNS('http://www.w3.org/2000/svg', tag); for(varkeyinattributes) { element.setAttribute(key, attributes[key]); } returnelement; } }
Comment