Ներածություն
JavaScript-ը ծրագրավորման լեզու է, որն աջակցում է օբյեկտի վրա հիմնված ծրագրավորմանը (OOP) օբյեկտների և նախատիպերի օգտագործման միջոցով: Այս հոդվածում մենք կխորանանք JavaScript-ի օբյեկտների և նախատիպերի աշխարհում՝ կենտրոնանալով օբյեկտի վրա հիմնված ծրագրավորման վրա: Մենք կուսումնասիրենք JavaScript-ում դասերի ստեղծումը, կհասկանանք ստացողների և սահմանողների հայեցակարգը, կքննարկենք ժառանգությունը դասերի հետ և առանց դասերի, ինչպես նաև կուսումնասիրենք օրինակներ և ստատիկ մեթոդներ: Այս հոդվածի վերջում դուք լավ կհասկանաք այս հասկացությունները և կիմանաք, թե ինչպես դրանք արդյունավետ կիրառել ձեր JavaScript կոդում:
Օբյեկտներ JavaScript-ում
JavaScript-ում օբյեկտները տվյալների կառուցվածքներ են, որոնք կարող են պահպանել հատկություններ և մեթոդներ: Հատկությունները բանալի-արժեք զույգեր են, մինչդեռ մեթոդները՝ օբյեկտի հետ կապված ֆունկցիաներ։ Տեսնենք JavaScript-ում օբյեկտներ ստեղծելու պարզ օրինակ.
const person = { name: 'John', age: 30, greeting() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } }; console.log(person.name); // Output: John console.log(person.age); // Output: 30 person.greeting(); // Output: Hello, my name is John and I am 30 years old.
Այս օրինակում մենք ունենք person
օբյեկտ՝ երկու հատկությամբ՝ name
և age
, և greeting()
մեթոդ, որը տպում է անհատականացված ողջույն: Մենք կարող ենք մուտք գործել օբյեկտի հատկություններ՝ օգտագործելով կետային նշումը և մեթոդը կանչել՝ օգտագործելով ֆունկցիայի կանչման շարահյուսությունը:
Դասեր JavaScript-ով
Չնայած JavaScript-ը չուներ հայրենական դասի աջակցություն մինչև ECMAScript 2015 (ES6), մենք կարող ենք դասեր մոդելավորել՝ օգտագործելով կոնստրուկտորի ֆունկցիաները և նախատիպերը: Տեսնենք JavaScript-ում դաս ստեղծելու օրինակ.
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.greeting = function() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); }; const person = new Person('John', 30); console.log(person.name); // Output: John console.log(person.age); // Output: 30 person.greeting(); // Output: Hello, my name is John and I am 30 years old.
Այս օրինակում մենք օգտագործում ենք Person
կոնստրուկտոր ֆունկցիա՝ name
և age
հատկություններով օբյեկտներ ստեղծելու համար: Այնուհետև մենք ավելացնում ենք greeting
մեթոդը կոնստրուկտոր ֆունկցիայի նախատիպին: new
հիմնաբառը օգտագործվում է Person
դասի օրինակ ստեղծելու համար: Այսպիսով, մենք կարող ենք ստեղծել դասի նման կառուցվածքով օբյեկտներ:
Ժամանակակից JavaScript-ում, սակայն, մենք կարող ենք օգտագործել դասի շարահյուսությունը, որը ներկայացված է ECMAScript 2015-ում (ES6)՝ ավելի հարմար դասեր ստեղծելու համար: Եկեք վերագրենք նախորդ օրինակը՝ օգտագործելով դասի շարահյուսությունը.
class Person { constructor(name, age) { this.name = name; this.age = age; } greeting() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } const person = new Person('John', 30); console.log(person.name); // Output: John console.log(person.age); // Output: 30 person.greeting(); // Output: Hello, my name is John and I am 30 years old.
Այս թարմացված օրինակում մենք սահմանում ենք դաս, որը կոչվում է Person
՝ օգտագործելով class
հիմնաբառը: constructor
մեթոդն օգտագործվում է name
և age
հատկությունները սկզբնավորելու համար, երբ ստեղծվում է դասի նոր օրինակ: greeting
մեթոդը սահմանվում է անմիջապես դասի մարմնի ներսում:
Օգտագործելով դասի շարահյուսությունը, մենք կարող ենք կազմակերպել մեր կոդը ավելի կառուցվածքային և ինտուիտիվ ձևով: Դասը գործում է որպես ընդհանուր հատկություններով և մեթոդներով օբյեկտներ ստեղծելու նախագիծ: constructor
մեթոդը ավտոմատ կերպով կանչվում է, երբ դասից նոր օբյեկտ է ստեղծվում, ինչը թույլ է տալիս մեզ սկզբնական արժեքներ սահմանել նրա հատկությունների համար:
Դասի ներսում սահմանված մեթոդները ավելացվում են դասի նախատիպին, ինչպես նախորդ օրինակում մենք մեթոդներ ենք ավելացրել նախատիպին՝ օգտագործելով կոնստրուկտորի ֆունկցիաները և նախատիպերը: Սա նշանակում է, որ դասի բոլոր օրինակները կիսում են նույն մեթոդի իրականացումը` նվազեցնելով հիշողության սպառումը:
Գեթթեր և կարգավորիչներ
Ստացողները և կարգավորիչները հատուկ մեթոդներ են, որոնք թույլ են տալիս վերահսկել օբյեկտի հատկությունների հասանելիությունը և արժեքների վերագրումը: Դրանք օգտակար են տվյալների ամբողջականությունն ապահովելու և վավերացումներ կատարելու համար: Տեսնենք JavaScript-ում ստացողների և կարգավորիչների օգտագործման օրինակ.
function Person(name) { this._name = name; Object.defineProperty(this, 'name', { get() { return this._name.toUpperCase(); }, set(newName) { if (typeof newName === 'string' && newName.length > 0) { this._name = newName; } else { console.log('The name must be a non-empty string.'); } } }); } const person = new Person('John'); console.log(person.name); // Output: JOHN person.name = 'Maria'; console.log(person.name); // Output: MARIA person.name = ''; // Output: The name must be a non-empty string. console.log(person.name); // Output: MARIA (value was not changed)
Այս օրինակում մենք օգտագործում ենք Object.defineProperty
մեթոդը՝ name
հատկության համար մուտքի կարգավորումները սահմանելու համար: Ստացողը վերադարձնում է հատկության արժեքը մեծատառերով, մինչդեռ սահմանիչը թույլ է տալիս նոր անուն վերագրել՝ կիրառելով վավերացում՝ համոզվելու համար, որ այն դատարկ չէ:
Ժառանգություն դասերի հետ և առանց դասերի
Ժառանգությունը OOP-ում կարևոր հասկացություն է, որը թույլ է տալիս դասին ժառանգել հատկություններ և մեթոդներ մեկ այլ դասից: JavaScript-ում ժառանգությանը կարելի է հասնել նախատիպերի միջոցով: Տեսնենք JavaScript-ում դասերով և առանց դասերի ժառանգության օրինակ.
// Inheritance with classes class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a sound.`); } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } const dog = new Dog('Rex'); dog.speak(); // Output: Rex barks. // Inheritance without classes function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(`${this.name} makes a sound.`); }; function Dog(name) { Animal.call(this, name); } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { console.log(`${this.name} barks.`); }; const dog = new Dog('Rex'); dog.speak(); // Output: Rex barks.
Այս օրինակում մենք ստեղծում ենք Animal
դաս և ածանցյալ դաս Dog
: Դասերի հետ ժառանգության դեպքում մենք օգտագործում ենք extends
հիմնաբառը՝ նշելու, որ Dog
դասը ժառանգում է Animal
դասից: Առանց դասերի ժառանգության մեջ մենք օգտագործում ենք կոնստրուկտոր ֆունկցիան և նախատիպը՝ ֆունկցիաների միջև ժառանգությունը հաստատելու համար։
Օրինակ և ստատիկ մեթոդներ
JavaScript-ում դասի մեթոդները կարող են դասակարգվել որպես օրինակային մեթոդներ և ստատիկ մեթոդներ: Օրինակների մեթոդները կապված են դասի օրինակների հետ, մինչդեռ ստատիկ մեթոդները կապված են հենց դասի հետ: Տեսնենք օրինակների և ստատիկ մեթոդների օգտագործման օրինակ.
class Calculator { constructor() { this.result = 0; } add(value) { this.result += value; } static subtract(value1, value2) { return value1 - value2; } } const calc = new Calculator(); calc.add(5); console.log(calc.result); // Output: 5 const subtraction = Calculator.subtract(10, 3); console.log(subtraction); // Output: 7
Այս օրինակում Calculator
դասը ունի օրինակի մեթոդ add
, որը թարմացնում է հաշվիչի ներքին արդյունքը: Բացի այդ, մենք ունենք subtract
ստատիկ մեթոդ, որն իրականացնում է ուղղակի հանում առանց դասի օրինակ ստեղծելու անհրաժեշտության:
Եզրակացություն
Այս հոդվածում մենք ուսումնասիրեցինք JavaScript-ում օբյեկտների և նախատիպերի հիմունքները՝ կենտրոնանալով օբյեկտի վրա հիմնված ծրագրավորման վրա: Մենք տեսանք, թե ինչպես կարելի է ստեղծել դասեր՝ օգտագործելով կոնստրուկտորի ֆունկցիաները և նախատիպերը, հասկացանք ստացողների և կարգավորիչների հայեցակարգը՝ սեփականության արժեքների հասանելիությունն ու վերագրումը վերահսկելու համար, քննարկեցինք ժառանգությունը դասերով և առանց դասերի, և ուսումնասիրեցինք օրինակներ և ստատիկ մեթոդներ: