SlideShare a Scribd company logo
1 of 22
Горник Виталий, PMP®
Ph.D. in IT (Computer Science)
Всё ли ты знаешь о JavaScript ООП?
Управляющий код процедурного программирования
постоянно обрабатывает различные ситуации.
Управляющий код ООП старается передать ответственность
исполнителю - объектам системы.
Процедурное vs ООП
0
5
10
15
20
25
30
Month1
Month3
Month5
Month7
Month9
Month11
Month13
Month15
Month17
Month19
Month21
Month23
Month25
Проц.
ООП
Ваши усилия и нервы на проекте
удовлетворённость работой обратно пропорциональна
…и радость от нового таска на проекте станет
такой
Три столпа ООП
1. Инкапсуляция через замыкания
2. Наследование через прототипирование
3. Полиморфизм а js не типизированный язык 
1. интерфейсов и абстрактных классов*
2. финальных классов
3. protected
4. статических членов классов
в JS нет
this
var obj = { outerWidth : 20 };
function getWidth() { return this.outerWidth; }
var a = getWidth ();
var b = getWidth.apply(obj);
this указывает на объект в контексте которого работает код
Изменение this?
1. var obj = new SomeFunction(…); // создаваемый объект
2. obj.publicFunction(….); // obj
3. someFunction.apply(obj,[arg1,arg2,….]); // obj
4. someFunction.call(obj, arg1,arg2,….); // obj
prototype или / и __proto__
function A() {….}
A.prototype – объект с одним свойством «constructor».
A.prototype.constructor – функция А
A.__proto__ – Function.prototype, потомoк Object.
Object есть парент всего.
alert(A.__proto__ === A.prototype.constructor.__proto__ ); // true
A
Function
Object
prototype
__proto__
prototype
__proto__
prototype
prototype – определяет свойства создаваемых объектов
__proto__ – есть у всех и служит для связи parent/child
function A(args) {….}
var obj = new A(args);
1. var obj = {};
2. obj.__proto__ = A.prototype;
3. var newConstructor = A.apply(obj, [args]);
4. obj = newConstructor instanceof Object ? newConstructor : obj;
alert(obj.prototype); // undefined
alert(obj.__proto__ === A.prototype); // true
alert(obj.__proto__.__proto__ === Object.prototype); // true
new
var obj = new A();
A.__proto__.p1 = 1; // добавили свойство в конструктор
alert (obj.p1); // “undefined”
alert (obj.constructor. p1); // “1”
obj.__proto__.p2 = 2;
alert(obj.p2); // “2”
A.prototype.p3 = 3;
alert(obj.p3); // “3”
Ещё два слова о prototype и __proto__
…бросаемся с настроением в код…
Простой объект, singleton
var obj =
{
v : "prop"
, AA1 : function(t)
{
alert(this.v + t);
}
}; // "obj" – это "new Object()" с "v" и "AA1" ключами
obj.AA2 = function(…){…..}; // добавили AA2 ключ к A
obj.AA1(1);
obj.AA2();
Простой класс
function A() { this.v = 'prop'; return this; }
A.prototype.AA1 = function(){…};
var obj = new A();
// “v” свойство объекта obj
// АА1 свойство прототипа объекта
A.prototype.AA2 = function(t) { alert(this.v+t); };
obj.AA2(2); // a1.__proto__ === A.prototype
поэтому работает
var obj2 = A(); // obj2 это window
obj2.AA1(1); // у которого нет AA1
function A() { return this; }
A.prototype = {
v : 'prop + '
, AA1 : function(){….}
};
// "A.prototype" превратилось в "new Object()"
// А.prototype.constructor не A
var obj = new A();
A.prototype.AA2 = function(){….};
obj.AA1();
Убей конструктор
private члены
function A()
{
var p1 = 1; // зона видимости “A”
function privateFunction() { p1=2; }
this.v = 'prop';
this.publicFunction = function()
{
privateFunction();
alert(this.v+p1);
}
}
A.prototype.AA1 = function(t){alert(this.v+t)};
var obj = new A();
obj.v = 'new value ';
obj.AA1(3);
obj.publicFunction();
var A = function()
{
var p1 = 1;
function privateFunction() { p1 = 2; }
function B() { return 1; }
B.prototype.v = 'prop ';
B.prototype.publicFunction = function()
{
privateFunction();
}
return B;
}
var obj = new ( A() )();
Сложный класс
var A = (function()
{
var p1 = 1;
function B() {}
B.prototype.setP1 = function(t){p1 = t; }
B.prototype.publicFunction = function() { alert(p1); }
return B;
})();
var obj1 = new A();
obj1.setP1(3);
var obj2 = new A();
obj2.publicFunction(); // alert "3"
Сложный singleton
function extend(Child, Parent) {….} // thx Crockford
function A() { ….. }
A.prototype.v = 'prop ';
A.prototype.AA1 = function(t){ alert(this.v+t); };
function B()
{
this.z = 2;
B.superclass.constructor.apply(this, arguments);
}
extend(B, A);
var obj = new B();
obj.AA1();
Наследование
Контактная информация
• Технический и проект менеджер
• Горник Виталий, PMP®, Ph.D. in IT (Computer Science)
• vhornik@gmail.com

More Related Content

What's hot

Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Alexandr Konfidentsialno
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияYandex
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМAlexandr Konfidentsialno
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияYandex
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.Igor Shkulipa
 
апкс 2011 05_verilog
апкс 2011 05_verilogапкс 2011 05_verilog
апкс 2011 05_verilogIrina Hahanova
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Sergey Platonov
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
 

What's hot (20)

Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знанияМихаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - JavaScript. Базовые знания
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМПрограммирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
 
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
 
Javascript functions
Javascript functionsJavascript functions
Javascript functions
 
Михаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знанияМихаил Давыдов — JavaScript: Базовые знания
Михаил Давыдов — JavaScript: Базовые знания
 
C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.C++ Базовый. Занятие 02.
C++ Базовый. Занятие 02.
 
апкс 2011 05_verilog
апкс 2011 05_verilogапкс 2011 05_verilog
апкс 2011 05_verilog
 
8 3-4
8 3-48 3-4
8 3-4
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 

Viewers also liked

Игровая физика в JavaScript
Игровая физика в JavaScriptИгровая физика в JavaScript
Игровая физика в JavaScriptPavel Klimiankou
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис РечкуновJSib
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис РечкуновJSib
 
Замыкания и область видимости
Замыкания и область видимостиЗамыкания и область видимости
Замыкания и область видимостиRodion Golovushkin
 
Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]GoIT
 
Визуальное проектирования интернет-проектов - Михаил Кашафутдинов
Визуальное проектирования интернет-проектов - Михаил КашафутдиновВизуальное проектирования интернет-проектов - Михаил Кашафутдинов
Визуальное проектирования интернет-проектов - Михаил Кашафутдиновit-park
 
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, Яндекс
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, ЯндексРеактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, Яндекс
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, ЯндексYandex
 
Сайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологийСайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологийYandex
 
Решение AFS физика
Решение AFS физикаРешение AFS физика
Решение AFS физикаmfrognet
 
Физика. Сделай сам. Лекция 1
Физика. Сделай сам. Лекция 1Физика. Сделай сам. Лекция 1
Физика. Сделай сам. Лекция 1lukoshka
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Вебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницуВебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницуYandex
 

Viewers also liked (14)

Игровая физика в JavaScript
Игровая физика в JavaScriptИгровая физика в JavaScript
Игровая физика в JavaScript
 
Files and JS
Files and JSFiles and JS
Files and JS
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
 
Замыкания и область видимости
Замыкания и область видимостиЗамыкания и область видимости
Замыкания и область видимости
 
Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]Frontend в режиме реального времени [05.03.15]
Frontend в режиме реального времени [05.03.15]
 
Визуальное проектирования интернет-проектов - Михаил Кашафутдинов
Визуальное проектирования интернет-проектов - Михаил КашафутдиновВизуальное проектирования интернет-проектов - Михаил Кашафутдинов
Визуальное проектирования интернет-проектов - Михаил Кашафутдинов
 
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, Яндекс
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, ЯндексРеактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, Яндекс
Реактивные интерфейсы с React.js и БЭМ: мастер-класс — Слава Аристов, Яндекс
 
Сайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологийСайт с нуля на полном стеке БЭМ-технологий
Сайт с нуля на полном стеке БЭМ-технологий
 
Решение AFS физика
Решение AFS физикаРешение AFS физика
Решение AFS физика
 
Физика. Сделай сам. Лекция 1
Физика. Сделай сам. Лекция 1Физика. Сделай сам. Лекция 1
Физика. Сделай сам. Лекция 1
 
Portfolіo TestReport - DM
Portfolіo TestReport - DMPortfolіo TestReport - DM
Portfolіo TestReport - DM
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Вебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницуВебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: верстаем веб-страницу
 

Similar to Всё ли ты знаешь о JavaScript ООП?

Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxYandex
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийngrebnev
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
javascript
javascriptjavascript
javascriptsovest
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''OdessaJS Conf
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189сdfdkfjs
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипах
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипахКлассы и фабрики. Как разобрать и собрать объект с наследованием на прототипах
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипахFDConf
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#Andrey Karpov
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияYandex
 

Similar to Всё ли ты знаешь о JavaScript ООП? (20)

JavaScript Intro
JavaScript IntroJavaScript Intro
JavaScript Intro
 
Михаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajaxМихаил Давыдов - Транспорт, ajax
Михаил Давыдов - Транспорт, ajax
 
Scala for android
Scala for androidScala for android
Scala for android
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Уменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложенийУменьшение влияния человеческого фактора при разработке бизнес приложений
Уменьшение влияния человеческого фактора при разработке бизнес приложений
 
JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
javascript
javascriptjavascript
javascript
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
 
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с331  информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
331 информатика. 8кл. миняйлова, вербовиков и др-минск, 2010 -189с
 
О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?О сложностях программирования, или C# нас не спасет?
О сложностях программирования, или C# нас не спасет?
 
Intro to Swift techitout
Intro to Swift techitoutIntro to Swift techitout
Intro to Swift techitout
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипах
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипахКлассы и фабрики. Как разобрать и собрать объект с наследованием на прототипах
Классы и фабрики. Как разобрать и собрать объект с наследованием на прототипах
 
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
PVS-Studio. Статический анализатор кода. Windows/Linux, C/C++/C#
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
 

Всё ли ты знаешь о JavaScript ООП?

  • 1. Горник Виталий, PMP® Ph.D. in IT (Computer Science) Всё ли ты знаешь о JavaScript ООП?
  • 2. Управляющий код процедурного программирования постоянно обрабатывает различные ситуации. Управляющий код ООП старается передать ответственность исполнителю - объектам системы. Процедурное vs ООП
  • 3. 0 5 10 15 20 25 30 Month1 Month3 Month5 Month7 Month9 Month11 Month13 Month15 Month17 Month19 Month21 Month23 Month25 Проц. ООП Ваши усилия и нервы на проекте удовлетворённость работой обратно пропорциональна
  • 4. …и радость от нового таска на проекте станет такой
  • 5. Три столпа ООП 1. Инкапсуляция через замыкания 2. Наследование через прототипирование 3. Полиморфизм а js не типизированный язык 
  • 6. 1. интерфейсов и абстрактных классов* 2. финальных классов 3. protected 4. статических членов классов в JS нет
  • 7. this var obj = { outerWidth : 20 }; function getWidth() { return this.outerWidth; } var a = getWidth (); var b = getWidth.apply(obj); this указывает на объект в контексте которого работает код
  • 8. Изменение this? 1. var obj = new SomeFunction(…); // создаваемый объект 2. obj.publicFunction(….); // obj 3. someFunction.apply(obj,[arg1,arg2,….]); // obj 4. someFunction.call(obj, arg1,arg2,….); // obj
  • 9.
  • 10. prototype или / и __proto__ function A() {….} A.prototype – объект с одним свойством «constructor». A.prototype.constructor – функция А A.__proto__ – Function.prototype, потомoк Object. Object есть парент всего. alert(A.__proto__ === A.prototype.constructor.__proto__ ); // true
  • 11. A Function Object prototype __proto__ prototype __proto__ prototype prototype – определяет свойства создаваемых объектов __proto__ – есть у всех и служит для связи parent/child
  • 12. function A(args) {….} var obj = new A(args); 1. var obj = {}; 2. obj.__proto__ = A.prototype; 3. var newConstructor = A.apply(obj, [args]); 4. obj = newConstructor instanceof Object ? newConstructor : obj; alert(obj.prototype); // undefined alert(obj.__proto__ === A.prototype); // true alert(obj.__proto__.__proto__ === Object.prototype); // true new
  • 13. var obj = new A(); A.__proto__.p1 = 1; // добавили свойство в конструктор alert (obj.p1); // “undefined” alert (obj.constructor. p1); // “1” obj.__proto__.p2 = 2; alert(obj.p2); // “2” A.prototype.p3 = 3; alert(obj.p3); // “3” Ещё два слова о prototype и __proto__
  • 15. Простой объект, singleton var obj = { v : "prop" , AA1 : function(t) { alert(this.v + t); } }; // "obj" – это "new Object()" с "v" и "AA1" ключами obj.AA2 = function(…){…..}; // добавили AA2 ключ к A obj.AA1(1); obj.AA2();
  • 16. Простой класс function A() { this.v = 'prop'; return this; } A.prototype.AA1 = function(){…}; var obj = new A(); // “v” свойство объекта obj // АА1 свойство прототипа объекта A.prototype.AA2 = function(t) { alert(this.v+t); }; obj.AA2(2); // a1.__proto__ === A.prototype поэтому работает var obj2 = A(); // obj2 это window obj2.AA1(1); // у которого нет AA1
  • 17. function A() { return this; } A.prototype = { v : 'prop + ' , AA1 : function(){….} }; // "A.prototype" превратилось в "new Object()" // А.prototype.constructor не A var obj = new A(); A.prototype.AA2 = function(){….}; obj.AA1(); Убей конструктор
  • 18. private члены function A() { var p1 = 1; // зона видимости “A” function privateFunction() { p1=2; } this.v = 'prop'; this.publicFunction = function() { privateFunction(); alert(this.v+p1); } } A.prototype.AA1 = function(t){alert(this.v+t)}; var obj = new A(); obj.v = 'new value '; obj.AA1(3); obj.publicFunction();
  • 19. var A = function() { var p1 = 1; function privateFunction() { p1 = 2; } function B() { return 1; } B.prototype.v = 'prop '; B.prototype.publicFunction = function() { privateFunction(); } return B; } var obj = new ( A() )(); Сложный класс
  • 20. var A = (function() { var p1 = 1; function B() {} B.prototype.setP1 = function(t){p1 = t; } B.prototype.publicFunction = function() { alert(p1); } return B; })(); var obj1 = new A(); obj1.setP1(3); var obj2 = new A(); obj2.publicFunction(); // alert "3" Сложный singleton
  • 21. function extend(Child, Parent) {….} // thx Crockford function A() { ….. } A.prototype.v = 'prop '; A.prototype.AA1 = function(t){ alert(this.v+t); }; function B() { this.z = 2; B.superclass.constructor.apply(this, arguments); } extend(B, A); var obj = new B(); obj.AA1(); Наследование
  • 22. Контактная информация • Технический и проект менеджер • Горник Виталий, PMP®, Ph.D. in IT (Computer Science) • vhornik@gmail.com