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.