Loading...
Yulia avatar Yulia 1346 Точки

[Useful Info] Всичко за JS OOP, което трябва да знаете

Здравейте :)

Попаднах на едно страхотно видео, в което кратко, точно и ясно се обяснява това, което учим толкова много време. Включете цялото си внимание само за 27 минути и слушайте наистина внимателно, за да не ви се налага да губите още време в подобни лекции.

Друго готино нещо, което показват във видеото е object playground, с който може да се създава нещо като клас-диаграми в JavaScript. Пробвах го само live на сайта им и изглежда наистина обещаващо, но не съм го build-вала в проект за сега.

Чувствайте се свободни да коментирате видеото/object playground, както и да споделите други алтернативни ресурси за ООП-то в JavaScript (макар че вярвам, че това видео е напълно достатъчно от към теория).

Сега е време и за практика :)

44
JavaScript Advanced 03/11/2014 19:37:06
yavor2000 avatar yavor2000 114 Точки
Best Answer

Здравейте,
първо искам да благодаря на Юлия за видео - беше ми много полезно - ако някой още не го е гледал, трябва!

Въс връзка с ООП в JavaScript искам да споделя с вас, какво открих че има в ECMAScript 5.1 - има цивилизовани getters и setters, подобно на пропъртитата в C#. Ето пример:

var Student = (function () {
function Student(name, age, scores) {
Person.call(this, name);
this.age = age;
this.scores = scores;
}

Student.inherits(Person);

Object.defineProperties(Student.prototype, {
age: {
get: function() { return this._age; },
set: function(value) {
value.checkIsPositive(); // validation
this._age = value;
}
},
scores: {
get: function() { return this._scores; },
set: function(value) {
// validation here
this._scores = value;
}
},
toString: {
value: function () {
return "Student " + this.name + " is " + this.age + " years old.";
}
}
});

return Student;
}());

По този начин можем да ползваме пропъртитата подобно на C#:

var pesho = new Student();
pesho.name = 'Pesho Peshev';
pesho.age = 30;

console.log(pesho.name); // Pesho Peshev
console.log(pesho.toString()); // Student Pesho Peshev is 30 years old.

"Закачам" методите и пропъртитата към прототипа с Object.defineProperties така не губя наследните методи и пропъртита и спестявам многократното повтаряне на Student.prototype :)
Този синтаксис се поддържа във всички нормални броузери и IE9+ (работи и в Node.JS)
11
13/11/2014 21:37:46
arsoman avatar arsoman 419 Точки

Здравей, понеже никой досега не е писал отговор, пък не вярвам никой да не го е гледал, искам да ти кажа голямо БЛАГОДАРЯ! Тоя човек е уникален, добре обяснява, примерите са лесни и точни! Явно поради краткото видео не успява да включи IIFE-тата, но това просто ограничава достъпността на функциите в обекта отвън. Браво за търсения и намерения от теб материал!

0
Yulia avatar Yulia 1346 Точки

Сетих се, че преди време създадох тази тема, а пък тя вече не отговаря на заглавието си. Затова: малък ъпдейт, защото идва ES6, който носи със себе си ред благинки, включително и за ООП ^^

Ето една хубава статийка с доста примери: ES6 Classes
И една примерна задача от "софтунските", решена от мен на ES6: VehiclePark Solution in ES6

И ако ви е интересен ES6, в това репо са събрани всякакви материали - ES6-Learning

6
27/04/2015 18:34:55
quickben avatar quickben 966 Точки

мерси, че го постна, че на train the trainers много ми харесаха демата :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.