Sobes.tech
Junior

Selgitage, kuidas JavaScriptis töötab pärimine.

sobes.tech AI

Vastus AI-lt

JavaScript pärimine põhineb prototüüpidel. Igal objektil on sisemine omadus [[Prototype]] (saadaval läbi __proto__ või Object.getPrototypeOf()), mis viitab teisele objektile.

Kui püüame ligi pääseda objekti omadusele või meetodile ning see ei ole otseselt objekti sees, otsib JavaScript seda [[Prototype]]-ist, siis [[Prototype]]-ist prototüübist ja nii edasi prototüüpide ahelas, kuni jõuab lõpuni (Object.prototype), mille [[Prototype]] on null.

See on prototüüpide pärimine.

ECMAScript 2015 (ES6) klassid on süntaktiline suhkur prototüüpide pärimisele. Need pakuvad mugavamat süntaksit prototüüpidega töötamiseks ja objektihierarhiate loomiseks.

Näide prototüüpide pärimise kasutamisest enne ES6:

// Vanema konstruktor
function Animal(name) {
  this.name = name;
}

// Vanema meetod prototüüp
Animal.prototype.sayHi = function() {
  console.log(`Tere, olen ${this.name}`);
};

// Lapse konstruktor
function Dog(name, breed) {
  // Vanema konstruktor kutsumine
  Animal.call(this, name);
  this.breed = breed;
}

// Määrame lapse prototüübi vanema prototüübi näidiseks
// Salvestame viite Dog konstruktorile
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// Lisame lapse meetodi
Dog.prototype.bark = function() {
  console.log("Haug-haug!");
};

// Loome lapse näidise
const myDog = new Dog("Bobi", "Labrador");

// Kasutame vanema ja lapse meetodeid
myDog.sayHi(); // Väljund: Tere, olen Bobi
myDog.bark();  // Väljund: Haug-haug!

ES6 klasside näide:

// Vanema klass
class Animal {
  constructor(name) {
    this.name = name;
  }

  sayHi() {
    console.log(`Tere, olen ${this.name}`);
  }
}

// Lapse klass, mis pärib Animal-ist
class Dog extends Animal {
  constructor(name, breed) {
    super(name); // Vanema konstruktor kutsumine
    this.breed = breed;
  }

  bark() {
    console.log("Haug-haug!");
  }
}

// Loome lapse klassi näidise
const myDog = new Dog("Reks", "Saksa lambakoer");

// Kasutame vanema ja lapse meetodeid
myDog.sayHi(); // Väljund: Tere, olen Reks
myDog.bark();  // Väljund: Haug-haug!

JavaScripti pärimise peamised punktid:

  • Prototüübid: Igal objektil on prototüüp.
  • Prototüüpide ahel: Ominaisuuse või meetodi otsimisel otsitakse ülespoole ahelat.
  • [[Prototype]]: Sisemine omadus, mis viitab prototüübile.
  • __proto__: Vananenud, kuid sageli kasutatav viis [[Prototype]]-i juurde pääsemiseks.
  • Object.getPrototypeOf(): Soovitatav viis [[Prototype]]-i saamiseks.
  • Konstruktorid ja prototype: Enne ES6 kasutati objektide loomisel ja nende prototüüpide seadistamisel.
  • Klassid (ES6): Süntaktiline suhkur prototüüpidele pärimiseks, kasutades võtmesõnu class, extends, super.