JavaScriptтеги обьектке багытталган программалоо менен башка тилдердеги OOP ортосундагы айырма эмнеде?
sobes.tech AI
AIден жооп
JavaScript прототиптик мурас алмаштыруу үчүн класс ордуна колдонулат.
Класс тилдеринде объекттер класс үлгүлөрүнүн экземплярлери болуп, алардын түзүлүшү жана жүрүм-туруму аныкталат. Мурас алуу бар болгон класс кеңейтүү аркылуу ишке ашырылат.
JavaScriptте класс деген түшүнүк салттуу мааниде жок. Объекттер түздөн-түз же башка прототиптик объекттердин негизинде түзүлөт. Мурас алуу прототиптердин чынжыр аркылуу ишке ашырылат, анда ар бир объекттин "ата" прототипине шилтеме бар. Объекттин мүчөсүнө же методуна кайрыларда, JavaScript алгач объектте издейд, андан кийин анын прототипинде, андан кийин прототиптин прототипинде жана ошондой эле чынжыр боюнча.
Объект түзүү жана JavaScriptте мурас алуу мисалы:
// Прототип объект түзүү
const animal = {
speak() {
console.log('Кээ бир жалпы үн');
}
};
// Прототипке негизделген объект түзүү
const dog = Object.create(animal);
// Жаңы объект үчүн методду кайра аныктоо
dog.speak = function() {
console.log('Гав!');
};
dog.speak(); // "Гав!" деп чыгат
Класс жана прототиптик OOP салыштыруу:
| Өзгөчөлүк | Класс OOP (Java, C++) | Прототиптик OOP (JavaScript) |
|---|---|---|
| Негизги механизм | Класстар жана класстардын экземплярлери | Объекттер жана прототиптер |
| Мурас алуу | 'extends' аркылуу класс мурас алуу | Прототиптердин чынжыры аркылуу мурас алуу |
| Объект түзүү | 'new' жана конструкторлор аркылуу | Түздөн-түз, Object.create(), конструкторлор (функциялар) |
| Полиморфизм | Методтерди кайра аныктоо аркылуу | Өзгөртүү аркылуу методдорду жана мүчөлөрдү кайра аныктоо |
| Инкапсуляция | Каттоо модулдары (public, private, protected) | Макулдашуу жана жабуу (closures) |
ECMAScript 2015 (ES6) класс киргизүүсү прототиптик мураска үстөк синтаксис киргизип, JavaScriptтеги OOP-ту класс тилдерине жакындатты, бирок негизги механизм прототиптик бойдон калууда.
// ES6 класстарын колдонуу мисалы
class Animal {
speak() {
console.log('Кээ бир жалпы үн');
}
}
class Dog extends Animal {
speak() {
console.log('Гав!');
}
}
const myDog = new Dog();
myDog.speak(); // "Гав!" деп чыгат