1 00:00:00,780 --> 00:00:06,234 Im letzten Talk-Through haben wir gelernt, wie wir einen Objekttyp für unsere beiden Winston-ähnlichen Objekte erstellen 2 00:00:06,234 --> 00:00:09,234 und diese dann mit den Konstruktoren initialisieren. 3 00:00:09,234 --> 00:00:13,472 Nun muss ein Objekttyp nicht nur mit Eigenschaften verbunden sein. 4 00:00:13,472 --> 00:00:18,806 Er kann auch mit Funktionalität verbunden werden. Denke an die Welt und all die Objekttypen in ihr 5 00:00:18,806 --> 00:00:26,287 wie uns Menschen. Wir alle haben Größe und Alter, aber wir haben auch Dinge, die wir tun können, wie schlafen, essen und programmieren. 6 00:00:26,287 --> 00:00:30,939 Und wir wollen diese Funktionen mit diesen Objekttypen assoziieren. 7 00:00:30,939 --> 00:00:35,949 In diesem Programm, das genau gleich ist, wie wir beim letzten Mal aufgehört haben, haben wir hier eine Funktion, 8 00:00:35,949 --> 00:00:43,066 drawWinston, die wir für beide Winston Objekte aufrufen. Wäre es nicht toll, wenn wir diese Funktion einfach 9 00:00:43,066 --> 00:00:48,569 mit dem Objekttyp Winston verbinden könnten? Nun, das können wir, und es ist einfach zu machen. 10 00:00:48,569 --> 00:00:55,725 Also schreiben wir unter unseren Konstruktor Winston - großes W - Punkt -prototyp 11 00:00:55,725 --> 00:00:59,232 Der Prototyp, das ist ein neues Wort, das du wahrscheinlich noch nicht gesehen hast. 12 00:00:59,232 --> 00:01:05,881 Der Prototyp ist diese Eigenschaft eines Objekts, an die wir Funktionen anhängen können 13 00:01:05,881 --> 00:01:13,309 und das bedeutet, dass jedes Objekt, das eine Instanz dieses Objekts ist, dann diese Funktionen hat. 14 00:01:13,309 --> 00:01:19,612 Wir können also sagen: "dot prototype" und dann "dot", und dann den Namen der Funktion, also sagen wir "draw, 15 00:01:19,612 --> 00:01:25,606 equals, und dann können wir unseren drawWinston Code nehmen und ihn einfach 16 00:01:25,606 --> 00:01:32,951 hierher verschieben. Was wir hier gemacht haben ist, dass wir eine Zeichenfunktion an unseren Winston Prototyp angehängt haben. 17 00:01:32,951 --> 00:01:40,008 Und das bedeutet, dass wir in der Lage sein sollten, draw() für jedes Objekt vom Typ Winston aufzurufen 18 00:01:40,008 --> 00:01:45,411 Wir sollten also in der Lage sein, draw() für winstonTeen oder winstonAdult aufzurufen. 19 00:01:45,411 --> 00:01:49,569 Wenn wir eine Funktion wie diese haben, die wir auf ein Objekt anwenden können, 20 00:01:49,569 --> 00:01:54,833 nennen wir das eigentlich eine "Methode", also hörst du mich jetzt vielleicht "Methode" sagen. 21 00:01:54,833 --> 00:01:58,272 Sagen wir also, das ist "die Methode draw()". Okay. 22 00:01:58,272 --> 00:02:04,103 So, jetzt löschen wir dies, und wir löschen das, und jetzt schauen wir, ob wir draw() aufrufen können? 23 00:02:04,103 --> 00:02:07,069 winstonTeen.draw() 24 00:02:07,069 --> 00:02:13,697 Ok. Wir haben einen Fehler, wir haben diese Fehlermeldung hier, sie sagt "winstObject ist nicht definiert" 25 00:02:13,697 --> 00:02:20,530 Okay. Also, vorher haben wir dieses Argument an drawWinston übergeben, welches das Winston Objekt war 26 00:02:20,530 --> 00:02:26,462 aber jetzt übergeben wir es nicht mehr. Ähm, also könnten wir dies ändern, um es zu übergeben 27 00:02:26,462 --> 00:02:30,819 und dann, mal sehen, was würden wir hier übergeben? Wir müssten winstonTeen übergeben. Aha. 28 00:02:30,819 --> 00:02:38,441 Das hat funktioniert, aber das scheint auch wirklich dumm zu sein. Ich rufe bereits draw auf dem Objekt selbst auf. 29 00:02:38,441 --> 00:02:43,965 Ich sollte nicht auch noch das Objekt übergeben müssen. Das scheint überflüssig zu sein. 30 00:02:43,965 --> 00:02:48,465 Und das stimmt, wir sollten das nicht tun müssen, also lass uns das hier löschen, und jetzt lass uns nachdenken. 31 00:02:48,465 --> 00:02:54,404 Wenn wir innerhalb des Objekts sind, was könnten wir benutzen, um auf die Eigenschaften des Objekts zuzugreifen? 32 00:02:54,404 --> 00:03:00,374 Nun, du siehst dir vielleicht unseren Konstruktor an und erinnerst dich an das spezielle Schlüsselwort "this" und denkst "ahh" 33 00:03:00,374 --> 00:03:08,573 "Was, wenn wir dies einfach in this ändern!" Also ändern wir winstObject in "this". 34 00:03:08,573 --> 00:03:12,951 Denn wir befinden uns gerade innerhalb des Objekts. Diese Funktion wird im Objekt ausgewertet 35 00:03:12,951 --> 00:03:16,861 also bezieht sich das "this" auf das aktuelle Objekt. 36 00:03:16,861 --> 00:03:23,271 Auf diese Weise können wir einfach "this" sagen und erhalten Zugriff auf alle Eigenschaften des aktuellen Objekts. 37 00:03:23,271 --> 00:03:26,720 Und das funktioniert perfekt, siehst du? Ist das nicht cool? 38 00:03:26,720 --> 00:03:31,907 Jetzt können wir also sagen winstonAdult.draw() 39 00:03:31,907 --> 00:03:38,271 Tada! Und es wird auf die Eigenschaften von winstonAdult zugreifen, weil das das Objekt ist, für das es aufgerufen wird. 40 00:03:38,271 --> 00:03:45,752 Das ist also das wirklich coole an dem Schlüsselwort "this", auch wenn es manchmal etwas verwirrend sein kann. 41 00:03:45,752 --> 00:03:52,028 Alles klar, das war echt Cool, also lass uns eine weitere Methode hinzufügen. Okay, also, was könnte Winston noch tun? 42 00:03:52,028 --> 00:04:01,078 Vielleicht wird er reden. Also machen wir eine Winston.prototype.talk, damit wir so viele Methoden an den Prototyp anhängen können, wie wir wollen. 43 00:04:01,078 --> 00:04:05,241 Wir sagen also: "Ich bin Winston!" 44 00:04:05,241 --> 00:04:13,181 Und dann sagen wir einfach this.x+20, und this.y+150. 45 00:04:13,181 --> 00:04:19,734 Und dann, ist nichts passiert, aber das liegt natürlich daran, dass ich die Funktion noch nicht wirklich aufgerufen habe. 46 00:04:19,734 --> 00:04:25,068 Also, lassen wir den Teenager sprechen, winstonTeen.talk(), er redet die ganze Zeit 47 00:04:25,068 --> 00:04:30,479 Ich bin Winston, tada! Und dann winstonAdult.talk() 48 00:04:30,479 --> 00:04:36,828 Tada! Alles klar, jetzt haben wir also diesen Winston Objekttyp, der folgende Eigenschaften hat: Nickname, 49 00:04:36,828 --> 00:04:45,026 Age, x, y; und er hat Funktionalität: Verhaltensweisen, Methoden; die abhängig von den Eigenschaften unterschiedlich agieren 50 00:04:45,026 --> 00:04:50,999 und wir können so viele Instanzen von Winstons erstellen, wie wir wollen und jede dieser Methoden darauf aufrufen. 51 00:04:50,999 --> 00:04:54,000 Das ist doch ziemlich cool!