Заголовок документа



бет15/26
Дата15.03.2024
өлшемі465.78 Kb.
#495676
1   ...   11   12   13   14   15   16   17   18   ...   26
JAVA SCRIPT-ОБЪЕКТІГЕ БАҒЫТТАЛҒАН СКРИПТІК БАҒДАРЛАМАЛАУ ТІЛІ-оқулық

};
}
var s = new Person("Simon", "Willison");
Мысалда қолданған жаңа кілт сөз: 'new'. Ол 'this' тығыз байланысты.
Бұл кілт сөз, жаңа бос объект жасайды, одан кейін аталған функцияны шақырады, аthis бұл жаңа объектіге сілтеме алады. Функцияларды шақыруға арналған 'new' конструкторлар деп аталады. Келісім бар, оған сәйкес барлық функциялары-конструкторлар бас әріптен басталып жазылады.
Әр қашан конструктор көмегімен жаңа обьект құрылады, қайтадан құрамыз және екі жаңа функцияларды жасаймыз. Бұл функцияларды әлдеқайда бөлек-бөлек құру және конструкторға қол жеткізу қызметтері ыңғайлы:
function personFullName() { return this.first + ' ' + this.last;
}
function personFullNameReversed() { return this.last + ', ' + this.first;
}
function Person(first, last) { this.first = first;
this.last = last;
this.fullName = personFullName; this.fullNameReversed = personFullNameReversed;
}
Қазірдің өзінде код құрылымы жақсы: функциялар-әдістерін тек бір рет құрдық, ал жаңа шақыру арқылы функциялар-конструкторды жай сілтемелейміз. Одан да жақсы жасауға болады? Әрине:
function Person(first, last) { this.first = first;
this.last = last;
}
Person.prototype.fullName = function fullName() { return this.first + ' ' + this.last;
}
Person.prototype.fullNameReversed = function fullNameReversed() { return this.last + ', ' + this.first;
}
Person.prototype бұл объект, оған кіру үшін барлық Person класс даналарының мүмкіндігі бар. Ол ерекше прототиптердің тізбегін
жасайды. Әр кезде, Person объектінің қолданыста жоқ қасиеттеріне қол жеткізуге тырысасыз, онда JavaScript Person.prototype қасиетінің бар жоғын тексереді. Нәтижесінде, Person.prototype объектінің барлық қасиеттеріне және this арқылы осы класстың барлық экземплярларына қол жетімді болады.
Бұл өте қуатты құрал. JavaScript прототипі кез келген уақытта өзгертуге мүмкіндік береді, бұл қолданыстағы объектілерді орындау кезінде жаңа әдістерді қосуға болатынын көрсетеді:
s = new Person("Simon", "Willison"); s.firstNameCaps();
// TypeError on line 1: s.firstNameCaps is not a function Person.prototype.firstNameCaps = function() {
return this.first.toUpperCase()
}
s.firstNameCaps(); // "SIMON"
JavaScript –тің жапсарлас салынған объектілеріне қызықты нәрсені қосудың прототиптер қасиеті болады. to String жаңа әдіс қосайық, ол мына қатарды соңынан алдына қайтарады:
var s = "Simon";
s.reversed(); // TypeError on line 1: s.reversed is not a function String.prototype.reversed = function reversed() {
var r = "";
for (var i = this.length - 1; i >= 0; i--) { r += this[i];
}
return r;
}
s.reversed(); // "nomiS"
Осы әдіс тіпті литералды жолдан жұмыс істейтін болады!
"This can now be reversed".reversed();
// desrever eb won nac sihT
Айтылғандай, prototype бұл тізбек бөлігі. Осы тізбектің прототиптерінің түпкі объектісі Object.prototype әдістер болып табылады, әдістер toString()–діде қамтиды - бұл әдіс объектінің қатарлық бейнеленуін алу керек болғанда шақырылатын болады. Міне, енді Person объектілерімен нелер жасауға болады:
var s = new Person("Simon", "Willison"); s.toString(); // [object Object] Person.prototype.toString = function() {
return '
' + this.fullName() + '>';
}
s.toString(); // "
Simon Willison>"
avg.apply()-ті бірінші аргументі null тең шақырдық. Енді былай жасаймыз: apply() әдісімен берілген объекттің бірінші аргументі, 'this' мәнін қабылдайтын. Міне, мысалы 'new' оңайлатып іске асыру:
function trivialNew(constructor, ...args) { var o = {}; // Создаём новый объект constructor.apply(o, arguments); return o;
}
Бұл new-тің дәл көшірмесі емес, өйткені ол прототиптердің тізбегін белгілемейді. Apply() әдісі өте жиі қолданылмайды, бірақ оны білу маңызды. Жоғарығы мысалда, ...args (көпнүктеніқоса алғанда) жазбасы "қалған аргументтер" деп аталады — ол қалған барлық аргументтерді қамтиды.
JavaScript –те apply() әдісіне ұқсас call()әдісі бар, ол да 'this' белгілеуге мүмкіндік береді, бірақ массив аргументтерін емес, тізімді қабылдайды.
function lastNameCaps() {
return this.last.toUpperCase();
}
var s = new Person("Simon", "Willison"); lastNameCaps.call(s);
// Аналогично записи:
s.lastNameCaps = lastNameCaps; s.lastNameCaps();




Достарыңызбен бөлісу:
1   ...   11   12   13   14   15   16   17   18   ...   26




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет