Premium Partner

Abend 4: 01.06.2016 - Engineering mit JavaScript (2)

Engineering mit JavaScript (2)

Engineering mit JavaScript (2)


Set of flashcards Details

Flashcards 23
Language Deutsch
Category Computer Science
Level University
Created / Updated 12.11.2016 / 17.01.2018
Licencing Not defined
Weblink
https://card2brain.ch/box/abend_4_01_06_2016_engineering_mit_javascript_2
Embed
<iframe src="https://card2brain.ch/box/abend_4_01_06_2016_engineering_mit_javascript_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Object Literal vs Function Literal

Mit welchen Einschränkungen in Bezug auf OOP muss man "leben" wenn man sich anstatt für die "Function Literal" Schreibweise für die "Object Literal" Schreibweise entscheidet?

In der "Object Literal" Schreibweise gibt es keine Möglichkeit private Variablen und Funktionen zu definieren.

Wie ist in JavaScript die Vererbung gelöst?

ede Funktion/Konstruktor hat eine modifizierbares Feld 'prototype'. Auf diesem wird die Superklasse referenziert und der Konstruktor der Klasse definiert:

function Animal() {
   ...
}

function Panda() {
...
}
Panda.prototype = new Animal();
Panda.prototype.constructor = Panda;

Der JavaScript interpreter schaut, wenn er die Methode nicht findet, gemäss der prototype chain nach, ob es in der oberen Funktion die Methode gibt.

Welche Zeilgen haben einen Primitiven Datentyp? (mehere Antworten möglich)

console.log('a)'+ typeof new String('Test String'));
console.log('b)'+typeof new String('          space String       ').trim());
console.log('c)'+typeof (2 * new Number(10)));
console.log('d)'+typeof new Number(10 + 3));
console.log('e)'+typeof 'true'.valueOf());
console.log('f)'+typeof Number('sdffdh'));

b),c),e),f)

 

 

Console Output:

a)object
b)string
c)number
d)object
e)string
f)number

Welche Ausgaben erzeugen die beiden console.log Aufrufe?

function Thing(color){
    this.myColor = color;
    this.setColor = function(newColor){
      this.myColor = newColor;
    };
}

var myThing = new Thing("white");

myThing.setColor("red");

console.log("Color 1: " + myThing.myColor);

var yourThing = myThing.setColor;

yourThing("blue");

console.log("Color 2: " + myThing.myColor);

 

Antworten:

a) Color 1: red, Color 2: red

b) Color 1: red, Color 2: blue

c) Color 1: red, Color 2: undefined

a)

Beschreibung:
Durch die Zuweisung:  var yourThing = myThing.setColor;  wird "this" auf das "globale" Objekt gesetzt.
Der Aufruf   yourThing("blue");    verändert dadurch die Farbe im Objekt "myThing" nicht.

Besser: Zwischenspeichern des Objekts this in self:

function Thing(color){
    var self = this;
    self.myColor = color;
    self.setColor = function(newColor){
      self.myColor = newColor;
    };
}

Welche Arten von Object Creation gibt es ?

  • Object Literal

var newObject = { color: “green”, colorize: function() { } };
 

  • Object Function

var newObject= newObject();
newObject.color= “green”;
newObject.colorize: function() { };

 

  • Object.CreateStatic Method

var newObject = Object.create(House.prototype);

  • Constructor Function

var newObject = new House("green", ...);

Was ist der Unterschied zwischen folgenden Codeteilen?

1.
function House(color) {

  this.facadeColor = color;

  this.paint = function(newColor) {

    this.facadeColor = newColor; 

  };

}

 

2.

function House(color) {

  this.facadeColor = color;

}

House.prototype.paint = function(newColor) {

  this.facadeColor = newColor;

}

Erste Variante bringt einen wesentlichen Nachteil. Diese Methode existiert pro Objektinstanz und führt daher oft zu unnötig hoher Speicherauslastung. Anders beim zweiten Beispiel, diese Methode wird über die ableitenden Objektinstanzen geteilt.

Was wird in die Konsole geloggt?

Snippet:

var variable= "september";
variable.vowels = 3;
console.log(variable.vowels);

 

Auswahl:

a) null

b) 3

c) undefined

Lösung: c

Pseudo-Code:

var primitive = "september";
primitive.vowels = 3;
//new object created to set property
(new String("september")).vowels = 3;
 
primitive.vowels;
//another new object created to retrieve property
(new String("september")).vowels; //undefined

Welches Entwurfsmuster wurde implementiert?

var pattern = (function () {
    var privateVar;

    function privateMember(arg1, arg2) {
        //code
    }

    return {
        member: function (arg1, arg2) {
            //code
        }
    };
}());

Das Entwurfsmuster Module.

Dieses Muster verhindert den Zugriff auf die private Variable privateVar.

Der Zugriff erfolgt über die nach dem Return definierten Memberfunktionen.

Der Aufruf erfolgt mit pattern.member().