Kategorie: Java Script

  • JS ES6 Tutorial

    JS ES6 Tutorial

    ES6 ist die Abkürzung für ECMAScript 6, ES6 ist der Standard für die Ausführung von JavaScript in aktuellen und kommenden Browsern und Servern. ES6 wurde 2015 entwickelt und hat neue Arbeitsweisen in Java Script implementiert. Alle gänigen Browser/NodeJs Server unterstützen ES6. In diesem Artikel findest du eine Übersicht von allen neuen Arbeitsweisen.

    Übersicht

    1. let und const
    2. Arrow Funktionen
    3. Standardwerte bei Funktionen
    4. Objekterweiterungen
    5. Rest Operator
    6. Spread Operator
    7. For of Loop
    8. Templates
    9. Destructuring Arrays
    10. Destructuring Objekte

    let und const

    ES6 bringt 2 neue Datentypen mit, einmal let und zum anderen const.

    let

    Der Datentype let ist für Variablen, die nur im aktuellen Block verarbeitet werden sollen. Es ist zu beachten, dass let in einem verschachtelten Block auch verfügbar ist, da sich ja der verschachtelte Block auch im aktuellen Block befindet. Kurz zur Klärung, ein Block ist z.B. eine if Bedingung, eine Funktion oder eine Schleife.

    if(true){
      let a = 1;
      console.log(a);
    }
    console.log(a);
    1
    Uncaught ReferenceError: a is not defined

    Zum vergleich dazu ein Beispiel mit var:

    if(true){
      var a = 1;
      console.log(a);
    }
    console.log(a);
    1
    1

    Let überschreibt nicht die Variablen die im Block dadrüber liegen. Sprich du kannst eine Variable mit var deklarieren und den gleichen Variablennamen, mit einer let deklaration, in einer if Bedingung benutzen.

    var a = 0;
    console.log(a);
    if(true){
      let a = 1;
      console.log(a);
    }
    console.log(a);
    0
    1
    0

    Des weiteren ist zu beachten, das z.B. in einer For Schleife der Kopf mit zum Block gehört.

    let a = 10;
    for(let a = 5; a > 0; a--){
      console.log(a);
      
    }
    console.log(a);
    5
    4
    3
    2
    1
    10

    const

    Const steht für Konstante, eine Konstante darf nur einmal definiert werden und danach nicht mehr verändert werden, da sonst ein Fehler zurückgegeben wird. Es ist zu beachten, dass bei const immer der Name von der Konstante groß geschrieben wird.

    const CONFIG_CONNECTION_IP = "127.0.0.1";
    

    Arrow Funktionen

    Vorab erstmal zeige ich dir die „alten“ Varianten Funktionen zu definieren.

    function consoleHello() {
      console.log("Hello World");
    }
    consoleHello();
    
    var consoleBye = function(){
      console.log("Bye World");
    }
    consoleBye();

    Diese Definitionen sollten dir bekannt sein. Mit der Arrow Funktion kommt eine dritte Möglichkeit hinzu.

    var newConsole = () => {
      console.log("new World");
    }
    newConsole();

    „var newConsole“ definiert den Funktionsnamen, „()“ die Parameter und „=>“ definiert den Übergang zum Funktionsbody. Einer der Vorteile bei dieser Variante ist die Möglichkeit die Funktion zu kürzen. Da wir nur ein Befehl in der Funktion haben, verhält sich das ähnlich wie mit einer if Bedingung, man kann die geschweiften Klammern weg lassen.

    var newConsole = () => console.log("new World");
    newConsole();

    Des weiteren kann man sich bei einer einzeiligen Funktion den return sparen.

    var newConsole = () => "new World";
    console.log(newConsole());

    Bei den Parametern gibt es auch eine kleine Besonderheit. Wenn du mehrere Parameter hast, schreibst du diese einfach mit einem Kommer getrent in die Klammern „= (parm1,parm2,parm3) =>“. Falls du nur ein Parameter hast , kannst du dir die Klammern sogar sparen „= parm1 =>“. Jetzt zeige ich dir, ein praktisches Beispiel dafür indem ich eine Variable mit einem festen Wert addieren mächte.

    var addToBasis = basis => basis+5;
    console.log(addToBasis(5));
    10

    Diese Schreibweise macht sich gut bei kurzen Callback Funktionen, z.B. bei diesem Timeout.

    setTimeout(() => console.log("1 Sekunde vergangen"), 1000);

    Vorteil bei Klassen beim Zugriff auf „this“

    Arrow Funktionen unterscheiden sich zu normalen Funktionen in einer riesigen Sache, es verarbeitet „this“ anders. Bei Arrow Funktionen wird das this Objekt von der aktuellen deklarationspunkt benutzt. Das wird in einer Klasse am besten sichtbar.

    class TestKlasse {
      constructor() {  
        
        let thisTestArrowFunc = () => this.test();
        
        function TestFunktion() {
          this.test();
        }
        
        thisTestArrowFunc();
        TestFunktion();
        
      }
      
      test(){ console.log(this) };
    }
    
    let TestObjekt = new TestKlasse();
    thisTestArrowFunc: TestKlasse {}
    TestFunktion: Uncaught TypeError: Cannot read property 'test' of undefined

    in JSBin öffnen

    Aber die normale Funktion kann auch Vorteile haben, z.B. wenn wir einen Button haben und dieser gedrückt wird, möchte man gerne in der Funktion mit dem Buttonobjekt über this arbeiten. Dies ist mit einer Arrow Funktion kompliziert zu bewerkstelligen.

    <!DOCTYPE html>
    <html>
    <head>
      <title>Button</title>
    </head>
    <body>
      <button>klick mich</button>
    </body>
    </html>
    var button = document.querySelector("button");
    
    function showButtonInfo(){
      console.log(this);
    }
    button.addEventListener('click', showButtonInfo);

    Wenn jetzt der Button gedrückt wird, wird in der Konsole das Button-Objekt ausgegeben. in JSBin öffnen

    var button = document.querySelector("button");
    
    var showButtonInfo = () => {
      console.log(this);
    }
    
    button.addEventListener('click', showButtonInfo);

    Die Arrow Funktion gibt das Window Objekt zurück. in JSBin öffnen

    Standardwerte bei Funktionen

    Mit ES6 können Funktionen jetzt auch default Werte gegeben werden, sprcih wenn der Parameter nicht mitgegeben wird, wird der Standard Wert verwendet.

    var istGleich = (zahl, vergleich = 10) => zahl === vergleich;
    console.log(istGleich(10));
    
    function istGleich2(zahl, vergleich = 10){
      return zahl === vergleich;
    }
    console.log(istGleich2(8));
    console.log(istGleich2(8,8));
    true
    false
    true

    in JSBin öffnen

    Objekterweiterungen

    Objekterweiterungen ist das automatische verwenden von Variablen. Wenn du eine Variable mit dem Namen „name“ definierst und danach ein Objekt mit dem Feld „name“, wird die erstellte Variable automatisch in das Objekt gespeichert.

    let name = "Marc";
    
    let person = {
      name,
      nachname: "Borkowski"
    }
    
    console.log(person);
    [object Object] {
      nachname: "Borkowski",
      name: "Marc"
    }

    Es ist natürlich möglich das Objektelement zu überschreiben bzw. nicht die Variable zu benutzen.

    let name = "Marc";
    
    let person = {
      name: "Max",
      nachname: "Borkowski"
    }
    
    console.log(person);
    [object Object] {
      nachname: "Borkowski",
      name: "Max"
    }

    Jetzt kommt der große Vorteil in der Sache, dies funktioeniert auch mit Funktionen, sprich du erstellst eine Funktion (ES5) und in dieser Funktion kannst du über this auf die einzelnen Elemente zugreifen. Hierdran siehst du auch das Arrow Funktionen Nachteile haben können. Benutze Arrow Funktionen nicht immer, diese können auch Nachteile haben.

    let name = "Marc";
    
    function sagHallo() {
      return "Hallo " + this.name;
    }
    
    let person = {
      name: "Max",
      nachname: "Borkowski",
      sagHallo
    }
    
    console.log(person.sagHallo());
    "Hallo Max"

    dynamisches erstellen von Objektelmenten

    Es ist möglich Objektelemente über Variableninhalte zu erstellen, dazu musst du einfach den Variablenname in Eckige Klammern beim Objekt setzen.

    let name = "Marc";
    let NachnamenFeld = "nachname"
    
    let person = {
      name: "Max",
      [NachnamenFeld]: "Borkowski"
    }
    
    console.log(person);
    [object Object] {
      nachname: "Borkowski",
      name: "Max"
    }

    Rest Operator

    Der Rest Operator transformirt eine Liste von Parametern in ein Array. Das hat den Vorteil, dass die Parameter dynamisch verarbeitet werden können. Der Nachteil ist, dass als Parameter immer eine Liste und kein Array übertragen werden sollte, da sonst das Array wieder in ein Array gepackt wird.

    let summeArray = (...nummern) => {
      console.log(nummern);
    }
    
    summeArray(1,2,3);
    summeArray([1,2,3]);
    [1, 2, 3]
    [[1, 2, 3]]

    Als praktisches Beispiel nehme ich eine Funktion die alle Parameter summieren soll, Dies ist ohne Rest Operator äußerst schwierig, da wir erst alle möglichen Parameter prüfen müssen.

    let summeArray = (...nummern) => {
      let summe = 0;
      for(let i = 0; i < nummern.length; i++)
        summe += nummern[i];
      
      return summe;
    }
    
    console.log(summeArray(1,2,3));
    6

    in JSBin öffnen

    Spread Operator

    Der Spread Operator ist das Gegenteil zum Rest Operator, es wandelt ein Array in eine Liste um. Dies ist ein Vorteil, wenn du zum Beispiel die max Methode verwendest, aber ein Array hast. Der Spread Operator wird diesmal beim Funktionsaufruf verwendet, nicht beim Funktionskopf.

    let nummern = [1,2,3];
    
    console.log(Math.max(nummern));
    console.log(Math.max(...nummern));
    NaN
    3

    in JSBin öffnen

    Beim Spread Operator ist auch möglich noch weitere Parameter hinzuzufügen. Man kann sogar mehrere Spread Operatoren hintereinander verwenden.

    let nummern = [1,2,3];
    console.log(Math.max(...nummern, ...[4,5,6], 9));
    9

    For of Loop

    For of Loop ist eine For Schleife, in der ein Array einfacher verarbeitet werden kann. Jedes Array Element wird temporär, für den einen Intervall, in eine Variable gespeichert.

    let nummern = [1,2,3,4];
    
    for(nummer of nummern) {
      console.log(nummer);
    }
    1
    2
    3
    4

    Dies ist natürlich auch mit einer Schleife machbar, aber diese kürzere Schreibweise macht den Code leserlicher.

    Templates

    Erstmal möchte ich dir das nach links gedrehte Anführungszeichen vorstellen. Neben Backspace mit gehaltener Shift Taste kannst du das Zeichen tippen -> „. Mit diesem Anführungszeichen ist es möglich Strings über mehrere Zeilen zu schreiben.

    let name = "Marc
    
    du"; // geht nicht
    
    let name = 'Marc
    
    du'; // geht nicht
    
    let name = `Marc 
    
    du`; // geht

    Mit den nach links gedrehten Anführungszeichen, ist es möglich Variablen mit einzubetten. Das machst du mit ${variablenname}.

    let name = "Marc";
    
    let willkommen = `Herzlich
    Willkommen
    ${name}`;
    
    console.log(willkommen);
    "Herzlich
    Willkommen
    Marc"

    Um ${} zu schreiben ohne das eine Variable ausgegebn werden soll, kannst du die Stelle mit \ maskieren.

    let name = "Marc";
    
    let willkommen = `Herzlich
    Willkommen
    \${name}`;
    
    console.log(willkommen);
    "Herzlich
    Willkommen
    ${name}"

    Es ist auch möglcih in den geschweiften Klammern Code auszuführen, als Beispiel möchte ich eine Zahl ausgeben und diese in der Ausgabe immer + 1 rechnen.

    let alter = 29;
    let ausgabe = `Du bist ${alter + 1}`;
    console.log(ausgabe);
    "Du bist 30"

    Destructuring Arrays

    Mit Destructuring Arrays kann man Arrays auseinandernehmen bzw. einfacher mit den Werten arbeiten. Wenn du auf der linken Seite der Variablendefinition eckige Klammern schreibst, kannst du auf einzelne Elemente von einem Array zugreifen. Das klingt zwar kompliziert, aber am Code Beispiel wirst du es schnell verstehen.

    let nummern = [1,2,3];
    let [a,b] = nummern;
    console.log(a);
    console.log(b);
    1
    2

    Es werden 2 Variablen erstellt und diesen werden die Werte von den ersten beiden Elementen des Arrays zugewiesen. Du kannst auch den Rest Operator mit einbauen falls du alle Elemente eines Arrays haben, mit der Außname vom ersten.

    let nummern = [1,2,3];
    let [a, ...b] = nummern;
    console.log(b);
    [2, 3]

    Destructuring Arrays hat noch ein großen Vorteil, Variablen vertauschen, früher brauchte man noch eine dritte Variable in den man den Wert zwischen gespeichert hat. Jetzt ist dies mit dieser Technik einfacher zu lösen.

    let a = 1;
    let b = 2;
    
    console.log(a);
    console.log(b);
    
    [b, a] = [a,b];
    
    console.log(a);
    console.log(b);
    
    1
    2
    2
    1

    Destructuring Objekte

    Was mit Arrays funktioniert, klappt auch mit Objekten. Nur der Unterschied ist, dass geschweifte Klammern verwendet werden, um Objektelemente aus dem Objekt zu „ziehen“.

    let objekt = {
      name: 'Marc',
      alter: 29,
      ort: 'Rostock'
    }
    let {name} = objekt;
    console.log(name);
    
    let {alter, ort} = objekt;
    console.log(alter, ort);
    "Marc"
    29
    "Rostock"

    Des weiteren kannst du bei Objekten noch ein Alias mithinzufügen. Wenn ein ALias angegeben ist, wird der Variablenname überschrieben. Alias werden nach dem Objektnamen mit einem Doppelpunkt geschrieben.

    let objekt = {
      name: 'Marc',
      alter: 29,
      ort: 'Rostock'
    }
    let {ort:stadt} = objekt;
    console.log(stadt);
    "Rostock"
  • interaktives und sich selbst updatendes SVG

    interaktives und sich selbst updatendes SVG

    Dieses SVG lädt immer die neusten Artikel von meinem Blog. Damit wäre es möglich Infografiken zu gestalten, die immer die aktuellen Werte haben.

    Man kann es runterladen und lokal öffnen, das SVG verbindet sich dann mit meinem Blog und lädt die Daten.

    Beispiel

    Inital lädt das SVG die neusten Artikel und nach den click auf den Button die älteren.

    download SVG

    Code

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
    <svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
    	 viewBox="0 0 595.28 841.89" style="enable-background:new 0 0 595.28 841.89;" xml:space="preserve">
    <style type="text/css">
    	.st0{fill:#FFFFFF;}
    	.st1{fill:#020203;}
    	.st2{fill:none;}
    	.st3{font-family:'MyriadPro-Regular';}
    	.st4{font-size:12px;}
    	.st5{fill:#F39200;}
    </style>
    <rect class="st0" width="595.28" height="841.89"/>
    <g>
    	<g>
    		<path class="st1" d="M306.2,36.53v-0.04H191.63v0.05c-23.45,0.96-42.18,20.26-42.18,43.95s18.72,43,42.18,43.96v0.01h0.33
    			c0.49,0.02,0.99,0.04,1.49,0.04s0.99-0.02,1.49-0.04h108.03c0.49,0.02,0.99,0.04,1.49,0.04s0.99-0.02,1.49-0.04h0.26v-0.01
    			c23.49-0.92,42.25-20.24,42.25-43.96C348.45,56.78,329.69,37.46,306.2,36.53z M305.11,113.49c-18.22,0-33-14.77-33-33
    			c0-18.22,14.78-33,33-33c18.23,0,33,14.78,33,33C338.12,98.71,323.34,113.49,305.11,113.49z"/>
    	</g>
    	<g>
    		<path class="st1" d="M71.3,124.43V36.51h30.79c10.67,0,18.76,2.04,24.27,6.13c5.52,4.09,8.27,10.07,8.27,17.96
    			c0,4.31-1.11,8.1-3.32,11.38c-2.21,3.28-5.29,5.69-9.24,7.22c4.51,1.13,8.06,3.4,10.66,6.82c2.6,3.42,3.89,7.61,3.89,12.56
    			c0,8.45-2.7,14.85-8.09,19.2c-5.39,4.35-13.08,6.56-23.07,6.64H71.3V124.43z M89.41,73.35h13.4c9.14-0.16,13.71-3.8,13.71-10.93
    			c0-3.99-1.16-6.85-3.47-8.6s-5.97-2.63-10.96-2.63H89.41V73.35z M89.41,86.15v23.73h15.52c4.27,0,7.6-1.02,9.99-3.05
    			c2.39-2.03,3.59-4.84,3.59-8.42c0-8.05-4.17-12.14-12.5-12.26C106.01,86.15,89.41,86.15,89.41,86.15z"/>
    	</g>
    	<g>
    		<path class="st1" d="M382.6,109.88h38.46v14.55h-56.58V36.51h18.12V109.88z"/>
    	</g>
    	<g>
    		<path class="st1" d="M451.49,124.49h-18.12V36.58h18.12V124.49z"/>
    	</g>
    	<g>
    		<path class="st1" d="M517.94,86.4h-34.78v23.55h40.82v14.55h-58.94V36.58h58.81v14.67h-40.7v20.95h34.78v14.2H517.94z"/>
    	</g>
    </g>
    <rect x="70" y="157" class="st2" width="454" height="624"/>
    <text transform="matrix(1 0 0 1 70 165.52)">
      <tspan x="0" y="0" class="st3 st4" id="title">neuste Artikel:</tspan>
      <tspan x="0" y="15" class="st3 st4" id="article1"></tspan>
      <tspan x="0" y="25" class="st3 st4" id="article2"></tspan>
      <tspan x="0" y="35" class="st3 st4" id="article3"></tspan>
      <tspan x="0" y="45" class="st3 st4" id="article4"></tspan>
      <tspan x="0" y="55" class="st3 st4" id="article5"></tspan>
    </text>
      <script type="text/javascript"><![CDATA[
      function loadnew() {
        page++;
        var url = "https://boolie.org/wp-json/wp/v2/posts/?per_page=5&page="+page;
    	const Http = new XMLHttpRequest();
    Http.open("GET", url);
    Http.send();
    var title = document.getElementById("title");
    Http.onreadystatechange = (e) => {
      var content = JSON.parse(Http.responseText);
      title.textContent = "Seite: "+page;
      article1.textContent = content[0].link;
      article2.textContent = content[1].link;
      article3.textContent = content[2].link;
      article4.textContent = content[3].link;
      article5.textContent = content[4].link;
    }
      }
      ]]></script>
    <rect x="130" y="745" class="st5" width="340" height="58" onclick="loadnew()"/>
    <rect x="130" y="768" class="st2" width="340" height="35"/>
    <text transform="matrix(1 0 0 1 252.9009 776.5195)" class="st3 st4" id="loadArticle" onclick="loadnew()">älteren Artikel laden</text>
      <script type="text/javascript"><![CDATA[
        var page = 1;
        var url = "https://boolie.org/wp-json/wp/v2/posts/?per_page=5&page="+page;
    	const Http = new XMLHttpRequest();
    Http.open("GET", url);
    Http.send();
    
    var article1 = document.getElementById("article1");
    var article2 = document.getElementById("article2");
    var article3 = document.getElementById("article3");
    var article4 = document.getElementById("article4");
    var article5 = document.getElementById("article5");
    
    Http.onreadystatechange = (e) => {
      var content = JSON.parse(Http.responseText);
      article1.textContent = content[0].link;
      article2.textContent = content[1].link;
      article3.textContent = content[2].link;
      article4.textContent = content[3].link;
      article5.textContent = content[4].link;
    }
      ]]></script>
    </svg>
    
  • Java Script Tutorial

    Java Script Tutorial

    In dieser Tutorial-Reihe lernst du die Grundlagen von Java Script. Von praktischen Übungen bis zur Theorie stelle ich dir, mein Wissen, kostenlos zur verfügung.

    Was ist Java Script?

    Java Script ist, wie der Name schon verrät, eine Scriptsprache, die überwiegend im Browser Verwendung findet. Sie kann CSS und HTML manipulieren und ermöglicht dadurch eine dynamische Website. Ein sehr bekanntes, aber unbeliebtes Beispiel, ist der Cookie Banner. Mit dem bestätigen der Cookies, lädt Java Script die einzelnen Scripte nach und speichert Cookies.

    Seit einigen Jahren expandiert Java Script, es kann damit eine App programmiert werden oder im Backend auf dem Server laufen, um z.B. Datenbankanfragen zu tätigen. 2015 kam ein großen Update zu JavaScript und ist unter ES6 bekannt, es hat die Sprache auf ein höheres Level gehoben.

    aktueller Standard – ES6

    Javascript ES6

    ES6 ist die Abkürzung für ECMAScript 6, ES6 ist der Zukünftige Standard für die Ausführung von JavaScript in aktuellen und kommenden Browsern und Servern. Zum Tutorial: JS ES6 Tutorial.

    Java Script und OOP

    JavaScript OOP Teaser

    Mit JavaScript ist es möglich Objekt Orientiert zu programmieren (OOP). Dies bedeutet das der Code eine modulare Struktur aufweist, der Vorteil bei dieser Programmierart ist die Wartbarkeit sowie die Erweiterbarkeit. Zum JavaScript: OOP – Klassen, Methoden und Vererbung Tutorial.

    Rekursion in JS

    Was ist rekursives Programmieren

    Kurz gesagt rekursives Programmieren bedeutet, dass eine Funktion oder Methode sich selbst aufruft. In diesem Tutorial findest du alles, was du wissen musst: Was ist rekursives Programmieren?.

    JS Hack: Clonen und manipulieren

    Javascript Funktionen clonen

    In Java Script ist es möglich Funktionen in eine Variable zu speichern und die Originale Funktion zu überschreiben. Dies ermöglicht es z.B. bei einem Videoplayer den Playbutton zu tracken. Zum JavaScript: Funktionen klonen & manipulieren Tutorial.

    Continue

    Was ist continue?

    In Schleifen können Labels gesetzt werden, dies sind Markierungen vor einer Schleife. Mit continue springt man zu diesem Label vor einer Schleife. Zum Tutorial: JavaScript – Was ist continue?.

    Zauberei

    JavaScript Sammlung Teaser

    Kleine Sammlung was JavaScript so alles kann. Zur Sammlung: JavaScript Magie.

    interaktive SVG

    svg interaktiv mit js

    Mit JavaScript kann man SVG’s interaktiv machen, z.B. Daten nachladen oder Schaltflächen einbauen. Bei diesem Beispiel lädt das SVG die neusten Artikel von diesem Blog und zeigt diese an. interaktives und sich selbst updatendes SVG

    geplante Tutorials 2021/22

    • Query Seletoren
    • JQuery
    • Basics (Variablen, if Bedinungen, rechnen, Schleifen, Funktionen)
    • Debuggen
    • Async / Sync
    • verketten
    • API
  • JavaScript Magie

    JavaScript Magie

    Kleine Sammlung was JavaScript so alles kann.

    Funktion als return

    function Samstag() {
        return () => alert("Moin");
    }
    Samstag()();
    function startHealthCheck() {
      const id = setInterval( () => console.log("i'm alive", 200) );
      return () => clearInterval(id);
    }
    
    const stopIt = startHealthCheck();
    setTimeout(() => stopIt(), 3000);

    Funktion als Parameter mit zusätzlichen Argumenten

    function Sonntag(f) { 
      return (...args) => {
        console.log("called", args);
        let result = f(...args);
        console.log("called", args, ", returned", result);
        return result;
      };
    }
    Sonntag(Math.min)(3, 2, 1)

    Funktionen Zwischenspeichern

    let Montag = () => {
      console.log("Moin");
    }
    
    let MontagClone = Montag;
    
    Montag = () => {
      console.log("Hello");
      MontagClone();
    }
    
    Montag();
    Montag = MontagClone;
    Montag();

    rekursive Funktionen

    function factorial(n) { 
      if (n == 0) { 
        return 1; 
      } else { 
        return factorial(n - 1) * n; 
      } 
    }
    
    factorial(8)

    Array Wandler

    const Dienstag = (...nummern) => (nummern);
    Dienstag(1,2,3);
    [1,2,3]

    Summe der Argumente multipliziert mit Argument

    const Mittwoch = a => { return (...args) => { return a * args.reduce((b, c) => b + c) }};
    Mittwoch(4)(10,15);
    100

    Rekursion mit abbruch Funktion

    const a = b => { 
      return c => {
        return (c(b)) ? a(b * b)(c) : b
      }
    };

    Easymode

    const func = function(number) { 
      return function(argFunc) {
        if(argFunc(number)) {
          return func(number * number)(argFunc);
        } else {
          return number;
        }
      }
    };
    func(5)(function(number){
      return number < 50
    });
    625

    Hardmode

    const a = b => c => (c(b)) ? a(b * b)(c) : b;
    a(5)(b => b < 50);
    625

    rekursive Iframes

    function fuckUp(func){
    var id = Math.random();
    ifrm = document.createElement("IFRAME");
    ifrm.setAttribute("src", window.location.href+"?"+id);
    ifrm.style.width = 250+"px";
    ifrm.style.height = 250+"px";
    ifrm.id = id;
    code = document.createElement("script");
    code.innerHTML = "("+func.toString()+")("+func.toString()+");";
    ifrm.addEventListener('load', () => {document.getElementById(id).contentDocument.body.appendChild(code)}, true);
    document.body.appendChild(ifrm);
    }
    fuckUp(fuckUp);

    Hast du noch ein lustiges Script das hier aufgeführt werden sollte? Kommentar bitte

  • Sharing Buttons für WordPress selber machen

    Sharing Buttons für WordPress selber machen

    Wenn du Sharing-Buttons auf deiner Webseite haben möchtest musst du nicht unbedingt ein Plugin installieren. Ich habe diese Variante gewählt, da keine Scripte von Facebook, Twitter oder Google+ meine Seite aufblähen. Meine Variante sind Pop-Ups die die Sharing URL öffnen. Der Vorteil dieser Variante ist, dass kein externen Service meine Seite tracken kann.

    Position herausfinden

    Ich empfehle, für diese Aufgabe, den Google Chrome. Einfach an die gewünschte Stelle Rechtsklick und auf Untersuchen klicken, danach öffnet sich rechts die Developer Konsole. Der Quelltext ist schon markiert, aber es sollte noch mal im Quelltext die Stelle genau gefunden werden an der du deine Buttons einbauen willst.
    Webseite untersuchen
    Quelltext Stelle finden
    Jetzt musst du dir die richtige Stelle im Quelltext merken, bei mir ist es zwischen lineBreak und clearBoth.

    Stelle im Theme finden

    Jetzt musst du per FTP die single.php downloaden. Du loggst dich über FTP (ich benutze FileZilla) auf dein Server ein und navigierst in den theme Ordner der im wp-content Ordner ist. Bei mir ist es folgender Pfad:

    /WordPress_05/wp-content/themes/boolie_theme

    In diesem Ordner befindet sich die Datei single.php.
    Jetzt öffnest du single.php mit deinem Editor, bei mir ist es der Atom Editor. Dort suche ich jetzt nach der lineBreak und clearBoth Stelle.
    Theme PHP

    Code eintragen

    Jetzt kommt der spannende Teil, der Sharing-Code wird eingetragen. Zuerst benötigst du das HTML, es kann frei gestaltet werden, mit der Ausnahme des Links.

    <div class="sharing">
      <span class="sharingText">Artikel teilen</span>
      <ul>
        <li class="share-facebook"><a href="#" id="shareAsFacebook">Facebook</a></li>
        <li class="share-twitter"><a href="#" id="shareAsTweet">Twitter</a></li>
        <li class="share-google-plus"><a href="#" id="shareAsGplus">Google+</a></li>
      </ul>
    </div>

    Bei den Links passiert jetzt nochnicht so viel, dass ändere ich mit JavaScript.

    document.getElementById('shareAsTweet').addEventListener('click', function (event) {
      window.open('https://twitter.com/share?url=<?php esc_url(the_permalink()); ?>&amp;text=<?php the_title(); ?>', '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600').focus();
      event.preventDefault();
      return false;
    });
    document.getElementById('shareAsFacebook').addEventListener('click', function (event) {
      window.open('https://www.facebook.com/sharer/sharer.php?u=<?php esc_url(the_permalink()); ?>', '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600').focus();
      event.preventDefault();
      return false;
    });
    document.getElementById('shareAsGplus').addEventListener('click', function (event) {
      window.open('https://plus.google.com/share?url=<?php esc_url(the_permalink()); ?>', '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600').focus();
      event.preventDefault();
      return false;
    });
    document.getElementById('shareAsTweet').addEventListener('click', function (event) {

    Mit dieser Zeile Code sagen wir dem Browser, er soll den folgenden Code ausführen wenn auf das Element mit der ID „shareAsTweet“ geklickt wird.

      window.open('https://twitter.com/share?url=<?php esc_url(the_permalink()); ?>&amp;text=<?php the_title(); ?>', '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600').focus();

    An dieser Stelle wird ein Pop-Up erstellt mit der Sharing-URL von Twitter und der Permanenten URL von deinem Beitrag.

    event.preventDefault();
    return false;

    Sagt dem Browser er soll die Standartaufgabe vom Linkklick abbrechen.

  • JavaScript: OOP – Klassen, Methoden und Vererbung

    JavaScript: OOP – Klassen, Methoden und Vererbung

    Mit JavaScript ist es möglich Objekt Orientiert zu programmieren (OOP). Dies bedeutet das der Code eine modulare Struktur aufweist, der Vorteil bei dieser Programmierart ist die Wartbarkeit sowie die Erweiterbarkeit. Wenn der Code gut entworfen wurde, ist es einfacher den Code zu verstehen. Mit einer Klasse ist es möglich Variablen und Methoden (Funktionen) zu einem Modul zu bündeln. Aus diesem Modul können dann beliebig viele Objekte erstellt werden, mit diesem Objekten sind die Methoden und Variablen verknüpft. Dabei hat aber jedes Objekt seine eigenen Variablen, sprich die Objekte teilen sich nicht die Variablen.

    Klasse definieren

    In JavaScript wird eine Klasse mit „class“ definiert, nach „class“ folgt der Name der Klasse. Es ist zu empfehlen einen Constructor zu verwenden, dies ist eine Methode die beim erstellen des Objekts ausgeführt wird.

    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
    }

    In diesem Beispiel wird die Klasse einfachesMathe erstellt, es werden 2 Parameter beim erstellen des Objektes in die Klasse gespeichert. Das this. gibt an, dass die Variablen Klassen intern gespeichert werden, sprich die beiden Werte können von jeder Methode in der Klasse benutzt werden.

    Objekt erstellen

    Mit „new“ kann von einer Klasse ein Objekt erstellt werden. In diesem Beispiel werden 2 Parameter übergeben, 2 und 5. Das erstellte Objekt wird in die Variable aufgabe gespeichert, mittels dieser Variable kann dann auf das Objekt zugegriffen werden.

    var aufgabe = new einfachesMathe(2, 5);
    console.log(aufgabe.zahlEins); // gibt 2 aus
    console.log(aufgabe.zahlZwei); // gibt 5 aus

    Dabei sollte aber drauf geachtet werden, dass die Klasse zuerst definiert wurde. Bei Funktionen ist dies egal ob zuerst der Funktionsaufruf kommt und dann die Funktion, aber bei Klassen muss zuerst die Klasse erstellt worden sein.

    var aufgabe = new einfachesMathe(2, 5);
    console.log(aufgabe.zahlEins);
    console.log(aufgabe.zahlZwei);
    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
    }
    // Uncaught ReferenceError: einfachesMathe is not defined
    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
    }
    var aufgabe = new einfachesMathe(2, 5);
    console.log(aufgabe.zahlEins);
    console.log(aufgabe.zahlZwei);
    // 2
    // 5

    Methoden

    Methoden sind Funktionen innerhalb einer Klasse. Es gibt 4 Arten von Methoden in einer Klasse, „get“ es werden Daten aus der Klasse geholt, „set“ übergibt an die Klasse Daten, „static“ sind nicht Objekt gebundene Methoden und werden als Helfer Methoden benutzt, des weiteren gibt es noch interne Methoden, bei diesen schreibt man einfach nur den Namen.

    get Methode

    Wie der Name schon verrät, holt man sich Daten aus der Klasse mit der Methoden art.

    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
      addieren(){
        return this.zahlEins + this.zahlZwei;
      }
      get addition(){
        return this.addieren();
      }
    }
    var aufgabe = new einfachesMathe(2, 5);
    console.log(aufgabe.addition);
    // 7

    Bei get werden keine runden Klammern benutzt, da diese Methode keine Parameter erlaubt.

    set Methode

    Mit set erstellt man eine Methode die Daten an die Klasse übergibt. Es ist nur ein Parameter erlaubt.

    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
      set setzeZahlEins(zahl){
        this.zahlEins = zahl;
      }
      set setzeZahlZwei(zahl){
        this.zahlZwei = zahl;
      }
    }
    var aufgabe = new einfachesMathe(2, 5);
    aufgabe.setzeZahlEins = 3;
    aufgabe.setzeZahlZwei = 8;

    Falls man doch mehrere Werte übergeben möchte, kann dies durch ein Array umgangen werden.

    class einfachesMathe {
      constructor(zahlEins, zahlZwei) {
        this.zahlEins = zahlEins;
        this.zahlZwei = zahlZwei;
      }
      set neueZahlen(zahlen){
        this.zahlEins = zahlen[0];
        this.zahlZwei = zahlen[1];
      }
    }
    var aufgabe = new einfachesMathe(2, 5);
    aufgabe.neueZahlen = [3,8];

    static Methoden

    Static Methoden sind Objekt übergreifend, dies bedeutet, dass 2 Objekte miteinander vergleicht werden können.

    class einfachesMathe {
      constructor(zahl) {
        this.zahl = zahl;
      }
      get getZahl(){
        return this.zahl;
      }
      static groeszer(objektA, objektB){
        if(objektA.getZahl > objektB.getZahl)
          return objektA;
        else
          return objektB;
      }
    }
    var zahl1 = new einfachesMathe(5);
    var zahl2 = new einfachesMathe(8);
    einfachesMathe.groeszer(zahl1, zahl2).getZahl;
    // 8

    Static Methoden werden immer auf die Klasse angewendet und nicht auf das Objekt

    interne/private Methoden

    Interne Methoden sind Methoden die nur innerhalb der Klasse benutzt werden. Diese Methoden sollten nicht von außen ausgeführt werden. Am besten schreibt man noch ein _ vor den Methodennamen, damit erkennbar wird das dies eine interne bzw. private Methode ist. Diese Methoden sind trotzdem von außen abrufbar, aber dies sollte vermieden werden, da sonst der Code unsauber wird.

    class einfachesMathe {
      constructor(zahl1, zahl2) {
        this.zahl1 = zahl1;
        this.zahl2 = zahl2;
      }
      _berechneAddition(){
         return this.zahl1 + this.zahl2;
      }
      get getAddition(){
        return this._berechneAddition();
      }
    }
    var aufgabe = new einfachesMathe(5, 6);
    aufgabe.getAddition;
    // 11

    Vererbung von Klassen

    Klassen Vererbung bedeutet, dass die Klasse die Methoden und Variablen von einer anderen Klasse übernimmt. Damit ist es möglich unspezifische Methoden in einer Klasse zu definieren und dann auf andere Klassen zu vererben

    class zahlen{
      constructor(zahl1, zahl2) {
        this.zahl1 = zahl1;
        this.zahl2 = zahl2;
      }
      set setZahlen(zahlen){
         this.zahl1 = zahlen[0];
         this.zahl2 = zahlen[1];
      }
      get getZahlen(){
         return [this.zahl1, this.zahl2];
      }
    }
    class addition extends zahlen{
      _berechneAddition(){
         return this.zahl1 + this.zahl2;
      }
      get getAddition(){
        return this._berechneAddition();
      }
    }
    class subtraktion extends zahlen{
      _berechneSubtraktion(){
         return this.zahl1 - this.zahl2;
      }
      get getSubtraktion(){
        return this._berechneSubtraktion();
      }
    }
    var aufgabe = new addition(5, 6);
    aufgabe.getAddition; // 11
    aufgabe.getZahlen; // [5,6]
    var aufgabe2 = new subtraktion(8, 5);
    aufgabe2.getSubtraktion; // 3
    aufgabe2.getZahlen; // [8,5]

    super

    „super“ wird verwendet, wenn von der Elternklasse eine Methode aufgerufen werden soll. Es kann vorkommen das die Klasse und die Elternklasse gleichnamige Methoden beinhalten, durch „super“ wird dann die Methode aus der Elternklasse verwendet und bei „this“ die Methode aus der eigenen Klasse.

    class vergleich {
      constructor(zahl) {
        this.zahl = zahl;
      }
      _check(){
        if(this.zahl == 1)
          return true;
        else
          return false;
      }
    }
    class zahlenvergleich extends vergleich{
      _check(){
        if(this.zahl == 2)
          return true;
        else
          return false;
      }
      get getVergleich(){
        return [this._check(), super._check()];
      }
    }
    var test = new zahlenvergleich(2);
    test.getVergleich; // [true, false]
  • JavaScript: Funktionen klonen & manipulieren

    JavaScript: Funktionen klonen & manipulieren

    In Java Script ist es möglich Funktionen in eine Variable zu speichern und die Originale Funktion zu überschreiben. Dies ermöglicht es z.B. bei einem Videoplayer den Playbutton zu tracken. Es soll mit Optimizley (ein A/B Testing Werkzeug) eine Videoseite optimiert werden und eins der Ziele ist das Abspielen vom Video, kann einfach die Funktion des Video abspielen überschrieben werden.

    Video Funktion klonen und manipulieren

    Code

    function playVideo(){
      // do some Stuff
      console.log("playing video " + arguments[0].video + " @time " + arguments[0].time);
    }
    playVideo({video: "Hello World", time: 1});
    
    var playVideoClone = playVideo;
    
    playVideo = function() {
      arguments[0].time = arguments[0].time + 1;
      playVideoClone(arguments[0]);
    }
    
    playVideo({video: "Hello World", time: 1});

    Ergebnis

    playing video Hello World @time 1
    playing video Hello World @time 2
  • JavaScript – Was ist continue?

    JavaScript – Was ist continue?

    In Schleifen können Labels gesetzt werden, dies sind Markierungen vor einer Schleife. Mit continue springt man zu diesem Label vor einer Schleife. Sprich eine art „goto“ in JavaScript, das nur in Schleifen verwendet werden kann.

    repeat:
    for(var i = 10; i >= 0; i--){
      console.log("i = " + i );
      for (var i2 = 10; i2 >= 0 ; i2--) {
        console.log("i2 = " + i2 );
        if(i2 === Math.floor((Math.random() * 10) + 1) )
          continue repeat;
      }
    }

    Bei diesem Beispiel wird die erste Schleife 10 Mal komplett ausgeführt, aber die Zweite Schleife wird abgebrochen sobald die Zufallszahl genau dem Index entspricht.
    Konsolenausgabe:

    i = 10
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    i2 = 4
    i2 = 3
    i2 = 2
    i2 = 1
    i2 = 0
    i = 9
    i2 = 10
    i2 = 9
    i2 = 8
    i = 8
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    i2 = 4
    i2 = 3
    i = 7
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i = 6
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    i = 5
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i = 4
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    i = 3
    i2 = 10
    i2 = 9
    i = 2
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    i2 = 4
    i2 = 3
    i2 = 2
    i = 1
    i2 = 10
    i2 = 9
    i = 0
    i2 = 10
    i2 = 9
    i2 = 8
    i2 = 7
    i2 = 6
    i2 = 5
    undefined