JavaScriptте мурасымдуулук кандай иштейт деп түшүндүрүп бериң.
sobes.tech AI
AIден жооп
JavaScriptте мурас алуу прототиптерге негизделген. Ар бир объекттин ички өзгөчөлүгү [[Prototype]] (жолугушуусу __proto__ же Object.getPrototypeOf() аркылуу болот), ал башка объектке көрсөтөт.
Объекттин өзгөчөлүгү же методуна кирүү аракетинде, ал түздөн-түз объектте табылбаса, JavaScript аны [[Prototype]] аркылуу издейт, андан кийин прототиптин [[Prototype]] жана ошондой эле прототиптердин чынжырында, акырында Object.prototypeке жеткенге чейин, анын [[Prototype]] null болот.
Бул прототиптик мурас алуу.
ECMAScript 2015 (ES6) класстары прототиптик мурас алуунун синтаксистик шекерлери болуп саналат. Алар прототиптер менен иштөө жана объекттердин иерархияларын түзүү үчүн көбүрөөк ыңгайлуу синтаксисти камсыз кылат.
ES6 алдында прототиптик мурас алуу мисалы:
// Ата-эне конструктору
function Animal(name) {
this.name = name;
}
// Ата-эне методу прототипте
Animal.prototype.sayHi = function() {
console.log(`Салам, мен ${this.name}`);
};
// Төменкү конструктор
function Dog(name, breed) {
// Ата-эне конструкторун чакырабыз
Animal.call(this, name);
this.breed = breed;
}
// Төменкү прототипти ата-эне прототипине орнотобуз
// Dog конструкторуна шилтемени сактайбыз
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
// Төменкү методу
Dog.prototype.bark = function() {
console.log("Гав-гав!");
};
// Төменкү экземпляр түзөбүз
const myDog = new Dog("Бобик", "Лабрадор");
// Ата-эне жана төмөнкү методдорду колдонуу
myDog.sayHi(); // Чыгарышы: Салам, мен Бобик
myDog.bark(); // Чыгарышы: Гав-гав!
ES6 класстарынын мисалы:
// Ата-эне класс
class Animal {
constructor(name) {
this.name = name;
}
sayHi() {
console.log(`Салам, мен ${this.name}`);
}
}
// Төменкү класс, Animalдан мурас алат
class Dog extends Animal {
constructor(name, breed) {
super(name); // Ата-эне конструкторун чакырабыз
this.breed = breed;
}
bark() {
console.log("Гав-гав!");
}
}
// Төменкү класс экземплярын түзөбүз
const myDog = new Dog("Рекс", "Немис овчарка");
// Ата-эне жана төмөнкү методдорду колдонуу
myDog.sayHi(); // Чыгарышы: Салам, мен Рекс
myDog.bark(); // Чыгарышы: Гав-гав!
JavaScriptте мурас алуунун негизги пункттары:
- Прототиптер: Ар бир объекттин прототипи бар.
- Прототиптердин чынжыры: Өзгөчөлүк же метод издегенде, прототиптер жогору карай каралат.
[[Prototype]]: ички өзгөчөлүк, прототипке шилтеме.__proto__: эскирген, бирок кеңири колдонулган прототипке жетүүнүн жолу.Object.getPrototypeOf(): сунушталган прототипке жетүүнүн жолу.- Конструкторлор жана
prototype: ES6ге чейин объекттер түзүү жана алардын прототиптерин орнотуу үчүн колдонулган. - Класстар (ES6): прототиптик мурас алуунун синтаксистик шекери,
class,extends,superачкыч сөздөрүн колдонуу менен.