Målpinde

LUP

Program

Objekter

I JavaScript er objekter en datatype, som kan indeholde en samling af nøgler og værdier. Nøglerne er unikke navne, der bruges til at referere til værdierne. Objekter kan indeholde en blanding af forskellige datatyper, inklusiv andre objekter. De kan også have metoder, som er funktioner, der er knyttet til objektet. Objekter kan oprettes ved hjælp af konstruktøren i en klasse.

Mange af os har prøvet at bevæge os ud i at have objekter i vores GF2 prøve - men vi mangler at bygge funktioner (metoder) ind i vores objekt.

Derudover kan objekter have metoder indbygget. For “Bobby” objektet har den 4 metoder som fungere som funktioner.

Untitled

Hvordan går vi fra vores nuværende måde at skrive kode til at lave objekter?

let brand = "Ford";
let km/l = 15.6;
let color = "Ford Blue";
let greenPropertyTaxAmount = null;

function CalculateGreenPropertyTax(km/l) {
if (15.4 < km/l && km/l < 16.7){
		greenPropertyTaxAmount = 1260;
	}
}

let car1337 = {
	brand: "Ford",
	"km/l": 15.6,
	color: "Ford Blue",
	greenPropertyTaxAmount: null,

	calculateGreenPropertyTax: function() {
		if (15.4 < km/l && km/l < 16.7){
			this.greenPropertyTaxAmount = 1260;
			console.log(this.greenPropertyTaxAmount) 
		}
}
car.calculateGreenPropertyTax()

car1337.km/l => 15.6

Klasser - Classes

JavaScript har ikke klasser?

Klasser er en skabelon for at lave objekter - vi kan altså bruge klasser til at lave flere objekter.

Som vi kan se indeholder en klasse nogle standart egenskaber (Properties) og Methods (Metoder også kaldet funktioner)

Untitled

//Kode for billede 
class Dog {
    constructor(color, eyeColor, height, length, weight) {
      this.color = color;
      this.eyeColor = eyeColor;
      this.height = height;
			this.length = length;
			this.weight = weight;
    }
    
    sit() {
      console.log("Dog sits");
		}
		lay_Down() {
      console.log("Dog lays down");
		}
		shake() {
      console.log("Dog shakes");
		}
		Comes() {
      console.log("Dog came to you");
		}
}
const Bobby = new Dog("Yellow", "Brown", "17 in", "35 in", "24 Pounds")
Bobby.height => 17 in
Bobby.sit() => Dog Sits

Klasser er ikke hoisted/hejst, det betyder at vi kan ikke kalde new Dog() før at vi har defineret klassen:

Don't 🛑
const Bobby = new Dog("Yellow", "Brown", "17 in", "35 in", "24 Pounds")
class Dog {...}

Do    ✅
class Dog {...}
const Bobby = new Dog("Yellow", "Brown", "17 in", "35 in", "24 Pounds")

Constructor

function Car(brand){
	~~const this = {}~~
	this.brand = brand
	~~return this~~
}

const car1 = new Car('Toyota')

Factory Function

function carFactory(brand) {
	return {brand}
}
const car1 = carFactory('Toyota')
console.log(car1) => { brand: 'Toyota' }
function carFactory(brand) {
	return { 
		brand,
		drive() {
				return `${brand} goes broom broom`

		}
	}
}
const car1 = carFactory('Toyota')
console.log(car1)         => { brand: 'Toyota', drive: [λ: drive] }
console.log(car1.drive()) => Toyota goes broom broom