Sobes.tech
Middle

JavaScriptтеги прототиптер эмне?

sobes.tech AI

AIден жооп

JavaScript объекттери башка объекттерден прототип механизм аркылуу мурас алууга мүмкүнчүлүк берет. JavaScriptтеги ар бир объекттин ички жашырылган өзгөчөлүгү [[Prototype]], ал башка объектке көрсөтүп турат, ал анын прототипи болуп саналат. Объекттин өзүнүн мүлкү же методуна кайрылыганда, JavaScript движок алгач аны объекттен издейт. Эгер таба албаса, ал [[Prototype]] өзгөчөлүгүнө кайрылып, прототипте издейт. Бул процесс прототиптер чынжырында кайра-кайра кайталанып, мүлк табылмайынча же nullке жеткенче уланат.

Негизги түшүнүктөр:

  • Прототип чынжыры: [[Prototype]] аркылуу байланышкан объекттердин тизмеси.
  • Мурас алуу: Объекттер өз прототиптеринин мүлктөрүн жана методдорун мурас алат.
  • __proto__: Тарыхый колдонулган (бирок баштапкы стандарт эмес) өзгөчөлүк [[Prototype]]ка жетүү үчүн. Азыр Object.getPrototypeOf() колдонуу сунушталат.
  • prototype: Конструктордун өзгөчөлүгү, ал [[Prototype]] аркылуу түзүлгөн объекттердин прототипи болуп саналат.

Конструктор жана прототип менен мисал:

// Конструктор
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// Прототипке метод кошуу
Person.prototype.sayHello = function() {
  console.log("Салам, менин атым " + this.name);
};

// Мисал түзүү
const person1 = new Person("Alice", 30);

// Прототиптеги методду чакыруу
person1.sayHello(); // Чыгуу: Салам, менин атым Alice

// Мисалдын прототипине жетүү
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Чыгуу: true

Бул мисалда:

  • Person — бул функция-конструктор.
  • Person.prototype — объект, ал бардык new Person() аркылуу түзүлгөн мисалдар үчүн прототип.
  • sayHello — прототипке кошулган метод. Бардык Person мисалдары бул методду мурас алат.
  • person1.sayHello() чакырганда, JavaScript движок sayHello-ду person1 ичинен издейт. Эгер таба албаса, ал [[Prototype]]-ге кайрылып, Person.prototype ичинен табат.

Прототиптер эс тутумду эффективдүү колдонууга мүмкүндүк берет, анткени методдор жана жалпы мүлк прототипте сакталат, ар бир объекттин мисалында дублёцияланбайт.