Фарқи байни барномасозии объектӣ дар 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 (Java, C++) | Прототипӣ OOP (JavaScript) |
|---|---|---|
| Механизми асосӣ | Синфҳо ва намунаҳои синфҳо | Объектҳо ва прототипҳо |
| Меросгирӣ | Меросгирӣ тавассути 'extends' | Меросгирӣ тавассути пайдарпайии прототипҳо |
| Сохтани объектҳо | Бо истифода аз калиди 'new' ва конструкторҳо | Мутаносибан, Object.create(), конструкторҳо (функсияҳо) |
| Полиморфизм | Бо барқарор кардани усулҳо дар синфҳо | Бо барқарор кардани хусусиятҳо ва усулҳо дар объектҳо |
| Инкапсулятсия | Модулҳои дастрасӣ (public, private, protected) | Шартҳо ва истифодаи бастаҳо (closures) |
Вуруд ба синфҳо дар ECMAScript 2015 (ES6) як шакли синтаксисӣ дар болоравии меросгирии прототипӣ овард, ки OOP дар JavaScript-ро ба забонҳои синфӣ монандтар мекунад, аммо механизми асосӣ боқӣ мемонад прототипӣ.
// Маслиҳат истифодаи синфҳо дар ES6
class Animal {
speak() {
console.log('Намуди умумии садо');
}
}
class Dog extends Animal {
speak() {
console.log('Гав!');
}
}
const myDog = new Dog();
myDog.speak(); // Натиҷа "Гав!"