JavaScript Academy · Les

Factoryfuncties

Maak objecten met private state via closures.

Les 4 van 413 stappen

Factoryfuncties is een gratis JavaScript Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject JavaScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus JavaScript Academy bevat in totaal 4 lessen.

Wat is een factoryfunctie

Een factoryfunctie is elke functie die een nieuw object teruggeeft. In tegenstelling tot een constructor roep je deze normaal aan, dus zonder new, en de functie kan closures gebruiken voor privétoestand.

function createUser(name) {
  return {
    name,
    greet: () => "Hi, I am " + name
  };
}
const u = createUser("Ada");
console.log(u.greet()); // "Hi, I am Ada"

Geen new-sleutelwoord

Factoryfuncties vermijden de valkuilen van new en this. Je roept de functie gewoon aan en krijgt een object terug.

function point(x, y) {
  return { x, y };
}
const p = point(3, 4);
console.log(p.x, p.y); // 3 4

Privétoestand via een closure

Variabelen die in de factoryfunctie worden gedeclareerd, zijn privé. De methoden van het teruggegeven object sluiten eroverheen, net als bij het modulepatroon, maar leveren meerdere instanties op.

function createCounter() {
  let count = 0; // private
  return {
    inc: () => ++count,
    get: () => count
  };
}
const c = createCounter();
c.inc();
console.log(c.get()); // 1

Veel onafhankelijke instanties

Elke aanroep van de factoryfunctie levert een nieuw object op met een eigen privétoestand. Dat is het belangrijkste verschil met een singletonmodule.

function createCounter() {
  let n = 0;
  return { inc: () => ++n };
}
const a = createCounter();
const b = createCounter();
console.log(a.inc(), a.inc()); // 1 2
console.log(b.inc());          // 1

Berekende eigenschappen

Factoryfuncties kunnen waarden bij het aanmaken afleiden en berekende methoden beschikbaar stellen, terwijl de invoer privé blijft.

function rectangle(w, h) {
  return {
    area: () => w * h,
    perimeter: () => 2 * (w + h)
  };
}
const r = rectangle(3, 4);
console.log(r.area());      // 12
console.log(r.perimeter()); // 14

Standaard- en optionele configuratie

Omdat het gewone functies zijn, kunnen factoryfuncties standaardwaarden en opties netjes verwerken met destructurering.

function createButton({ label = "OK", disabled = false } = {}) {
  return { label, disabled };
}
console.log(createButton());             // { label: "OK", disabled: false }
console.log(createButton({ label: "Go" })); // { label: "Go", disabled: false }

Compositie boven overerving

Factoryfuncties geven de voorkeur aan compositie: bouw een object door gedragingen te combineren in plaats van een klasseketen uit te breiden.

const canFly = (s) => ({ fly: () => s.name + " flies" });
function createBird(name) {
  const self = { name };
  return Object.assign(self, canFly(self));
}
console.log(createBird("Robin").fly()); // "Robin flies"

Gedeeld gedrag

Als je methoden tussen instanties wilt delen zonder kopieën per instantie, definieer je ze één keer en wijs je ze toe. Je kunt ook de kleine extra kosten accepteren vanwege het privacyvoordeel dat closures bieden.

const behavior = {
  describe() { return "id " + this.id; }
};
function createItem(id) {
  return Object.assign({ id }, behavior);
}
console.log(createItem(7).describe()); // "id 7"

Ook functies teruggeven

Een factoryfunctie kan ook een functie in plaats van een object teruggeven als dat een duidelijker koppelvlak oplevert, terwijl de functie nog steeds privétoestand vastlegt.

function multiplier(factor) {
  return (n) => n * factor;
}
const triple = multiplier(3);
console.log(triple(5)); // 15

Factoryfunctie tegenover constructor

Constructors gebruiken new, this en de prototypeketen. Factoryfuncties zijn eenvoudiger, vermijden bugs met this en bieden echte privacy via closures, maar delen methoden niet via een prototype.

Validatie bij het aanmaken

Factoryfuncties kunnen invoer valideren en deze normaliseren of een uitzondering gooien voordat ze een object teruggeven. Zo is elk geproduceerd object gegarandeerd geldig.

function createAge(value) {
  if (value < 0) throw new Error("age must be >= 0");
  return { value };
}
console.log(createAge(30).value); // 30

Korte controle

Factoryfuncties.

Samenvatting

Factoryfuncties geven objecten terug zonder new of this en gebruiken closures voor privétoestand. Elke aanroep levert een onafhankelijke instantie op, met ondersteuning voor berekende eigenschappen, standaardconfiguratie, compositie en validatie. Ze ruilen het delen van methoden via een prototype in voor eenvoud en echte privacy en vormen zo een duidelijk alternatief voor constructors dat door closures wordt aangedreven.

Gratis beginnen

Leer JavaScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
59
Lessen
200

Veelgestelde vragen

Is de les “Factoryfuncties” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad JavaScript Academy, waaronder “Factoryfuncties”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus JavaScript Academy bevat in totaal 4 lessen.

Wat leer ik in “Factoryfuncties”?

Maak objecten met private state via closures. Je oefent met JavaScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met JavaScript Academy te beginnen?

Ervaring vooraf is niet nodig. JavaScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Factoryfuncties”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over JavaScript Academy?

Ja. Elke les over JavaScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Hoe closures state vastleggen
  2. Private variabelen met closures
  3. Het modulepatroon (IIFE)
  4. Factoryfuncties
← Terug naar JavaScript Academy