SlideShare a Scribd company logo
1 of 26
ООП в JavaScript
Создание: Из пустого объекта { } 
var person = { }; 
person.name = ‘Dino’; 
person.getName = function () { 
return person.name; 
}; 
1 
2 
3 
4 
5
Создание: Сразу {…} 
var person = { 
name: ‘Dino’, 
getName: function () { 
return this.name; 
} 
}; 
123456 
ЗЗААППЯЯТТААЯЯ
Манипуляции 
• CRUD свойств 
• Вложенные объекты 
• Передача по ссылке всегда 
myObject.myProperty == myObject[‘myProperty’] 
myObject.FOO 
myObject.FOO.BAR 
myObject.FOO && myObject.FOO.BAR 
undefined 
TypeError 
undefined 
for (myProperty in myObject) {…}
Object.prototype 
• Добавление свойств во все экземпляры: 
myPerson.prototype.provider = ‘WebStream’ 
•Расширение встроенных объектов Array, String: 
Array.prototype.forEach 
Array.prototype.filter 
Array.prototype.splice 
String.prototype.htmlEncode 
String.prototype.trim 
String.prototype.replace 
•При удалении свойства у объекта будет 
“просвечивать” то же свойство его прототипа
Конструктор: Запись 
var Person = function (name) { 
this.name = name; 
this.say = function () { 
return "I am " + this.name; 
}; 
}; 
123456
Конструктор: Неявные действия 
var Person = function (name) { 
var this = Object.create(Person.prototype); 
this.name = name; 
this.say = function () { 
return ‘I am ‘ + this.name; 
}; 
return this; 
}; 
Конструктор может возвращать любой объект 
1 
a 
2345 
b 
6
Отсутствие ‘new’ не ошибка 
= 
this.member == window.member 
• constructor - UpperCamelCase 
• methods - lowerCamelCase
Конструктор: проверка this 
function Person(name) { 
if (!(this instanceof Person)) { 
return new Person(name); 
} 
this.name = name; 
} 
123456
Приватные свойства: В конструкторе 
Решение – замыкание (closure) 
function Person() { 
var gender = ‘Female’; 
this.getGender = function () { 
return gender; 
}; 
} 
• Возвращенный объект можно изменить: 
– возвращать только то, что надо 
– возвращать копию объекта 
1 
2345 
6
Приватные свойства: Без конструктора 
Anonymous Immediate Function (Анонимное замыкание) 
var myPerson = (function () { 
var gender = ‘Female’; 
return { 
getGender: function () { 
return gender; 
} 
}; 
}()); 
1 
2345 
678
Статические свойства: Публичные 
var Person = function () { }; 
Person.getSpecies = function () { 
return ‘Homo sapiens’; 
}; 
1 
2 
3 
4 
• Статический метод не запустится на объекте 
• Объектный метод не запустится как статический
Статические & объектные методы 
var Person = function (name) { 
this.name = name; 
}; 
Person.getSpecies = function () { 
var msg = ‘Homo sapiens’; 
if (this instanceof Person) { 
msg += ‘, named ‘ + this.name; 
} 
return msg; 
}; 
Person.prototype.getSpecies = function () { 
return Person.getSpecies.call(this); 
}; 
123 
456789 
10 
11 
12 
13
Статические свойства: Приватные 
• разделены между объектами, которые созданы одним конструктором 
• не доступны вне конструктора 
var Person = (function () { 
var counter = 0, NewPerson; 
NewPerson = function () { 
counter += 1; 
}; 
NewPerson.prototype.getCount = function () { 
return counter; 
}; 
return NewPerson; 
}()); 
123456789 10
Константы 
• ALL_CAPS 
ИХ НЕТ 
• Объект Constant с методами: 
–set(name, value) 
– isDefined(name) 
–get(name)
Цепочки объектов (chaining) 
myObj.method1(‘hello’).method2().method3(‘world’); 
return this; 
изящно 
специализировано train wreck
Правда о наследовании 
• Нет классов как класса 
• "Функция-конструктор" - более аккуратная замена 
термина "класс" 
• "Экземпляр класса" не имеет того смысла 
• Но есть слово «new» 
• Object.prototype 
• Объекты создаются на основе других объектов 
• Объекты - это просто пары «ключ»-«значение» 
• “Prefer object composition to class inheritance.” GoF
Наследование классами: Функция inherit(C, P) 
КОНСТРУКТОР 
PARENT 
КОНСТРУКТОР 
CHILD 
inherit (child, parent); 
НАСЛЕДНИК
Наследование классами: Обычный способ 
function Parent(name) { 
this.name = name || 'Adam'; 
} 
Parent.prototype.say = function () { 
return this.name; 
}; 
function Child(name) { }; 
inherit(Child, Parent); 
function inherit(C, P) { 
C.prototype = new P(); 
} 
1 
234567 
8 
9 
10 
11 
• Нет 
передачи 
параметров 
• Потомку 
передается 
весь 
Родитель, 
а не его 
prototype
Наследование классами: Святой Грааль 
var inherit = (function () { 
var F = function () { }; 
return function (C, P) { 
F.prototype = P.prototype; 
C.prototype = new F(); 
C.uber = P.prototype; 
C.prototype.constructor = C; 
} 
}()); 
1 
23456789
Наследование классами: Картинка 
new Parent() 
name = Adam 
prototype: 
say() 
new F() 
prototype 
new Child() prototype 
constructor = Child 
uber
Наследование классами лучше избегать 
• Технически классов в JavaScript не существует 
• Путаница в терминологии и реализации 
• Подобный подход можно использовать, если 
разработчик не умеет работать с прототипами, а 
умеет с классами 
• Повторно использовать код можно и без 
"классического" наследования
Наследование прототипами 
if (typeof Object.beget !== 'function') { 
Object.beget = function (o) { 
var F = function () { }; 
F.prototype = o; 
return new F(); 
}; 
} 
var anotherPerson = Object.beget(person); 
Объекты наследуются от объектов 
1 
234567 
8
Наследование копированием свойств 
1. shallow copy 
2. deep copy 
function extend(parent, child) { 
var i; 
child = child || { }; 
for (i in parent) { 
if (parent.hasOwnProperty(i)) { 
child[i] = parent[i]; 
} 
} 
return child; 
} 
Prototype не участвуют. 
Только СОБСТВЕННЫЕ свойства объектов
Одалживание (borrowing) методов 
методы объекта «Функция» CALL и APPLY 
objFOO.myMethod.call(objBAR, param1, p2, p3); 
objFOO.myMethod.apply(objBAR, [param1, p2, p3]); 
• В методе objFOO.myMethod() вместо this 
подставляется objBAR 
• Нужны только те свойства, которые используются в 
методе 
• Не надо строить иерархию наследования ради 
нескольких методов
Спасибо за внимание, вопросы 
1. Создание: Из пустого объекта { } 
2. Создание: Сразу {…} 
3. Манипуляции 
4. Конструктор: Запись 
5. Конструктор: Неявные действия 
6. Отсутствие “new” не ошибка 
7. Конструктор: проверка this 
8. Приватные свойства: В конструкторе 
9. Приватные свойства: Без конструктора 
10. Статические свойства: Публичные 
11. Статические & объектные методы 
12. Статические свойства: Приватные 
13. Константы 
14. Цепочки объектов 
15. Правда о наследовании 
16. Наследование классами: Функция inherit(C, P) 
17. Наследование классами: Обычный способ 
18. Наследование классами: Святой Грааль 
19. Наследование классами: Картинка 
20. Наследование классами лучше избегать 
21. Наследование прототипами 
22. Наследование копированием свойств 
23. Одалживание (borrowing) методов

More Related Content

What's hot

Yii development
Yii developmentYii development
Yii development
MageCloud
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
Paul Stashevsky
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
Oleg Parinov
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
AndreyGeonya
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)
Ontico
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo
 

What's hot (20)

Yii development
Yii developmentYii development
Yii development
 
Модульный объект: как это работает в «Аллодах Онлайн».
Модульный объект: как это работает в «Аллодах Онлайн».Модульный объект: как это работает в «Аллодах Онлайн».
Модульный объект: как это работает в «Аллодах Онлайн».
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ2-е занятие курса iPhone разработки в ГУ-ВШЭ
2-е занятие курса iPhone разработки в ГУ-ВШЭ
 
Spring puzzlers 2
Spring puzzlers 2Spring puzzlers 2
Spring puzzlers 2
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Kotlin with API tests
Kotlin with API testsKotlin with API tests
Kotlin with API tests
 
Spring puzzlers
Spring puzzlersSpring puzzlers
Spring puzzlers
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)Язык программирования Scala / Владимир Успенский (TCS Bank)
Язык программирования Scala / Владимир Успенский (TCS Bank)
 
Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Xtend
XtendXtend
Xtend
 
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
 

Similar to ООП в JavaScript

Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
solit
 
JavaScript. OOP (in russian)
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)
Mikhail Davydov
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
Mikhail Davydov
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
ITmozg
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
Yandex
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Глеб Тарасов
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
Noveo
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
it-people
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
metaform
 

Similar to ООП в JavaScript (20)

JavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программированияJavaScript как объектно-ориентированный язык программирования
JavaScript как объектно-ориентированный язык программирования
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
new JavaScript
new JavaScriptnew JavaScript
new JavaScript
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
Survive with OOP
Survive with OOPSurvive with OOP
Survive with OOP
 
JavaScript. OOP (in russian)
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
функции в Java script
функции в Java scriptфункции в Java script
функции в Java script
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
 
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Squeek 1
Squeek 1Squeek 1
Squeek 1
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 

More from enterra-inc (6)

Enterra Inc presentation
Enterra Inc presentationEnterra Inc presentation
Enterra Inc presentation
 
Windows Phone Portfolio
Windows Phone PortfolioWindows Phone Portfolio
Windows Phone Portfolio
 
Презентация компании Энтерра
Презентация компании ЭнтерраПрезентация компании Энтерра
Презентация компании Энтерра
 
Портфолио на Windows Phone
Портфолио на Windows PhoneПортфолио на Windows Phone
Портфолио на Windows Phone
 
Портфолио на iOS
Портфолио на iOSПортфолио на iOS
Портфолио на iOS
 
Портфолио работ на Android
Портфолио работ на Android Портфолио работ на Android
Портфолио работ на Android
 

ООП в JavaScript

  • 2. Создание: Из пустого объекта { } var person = { }; person.name = ‘Dino’; person.getName = function () { return person.name; }; 1 2 3 4 5
  • 3. Создание: Сразу {…} var person = { name: ‘Dino’, getName: function () { return this.name; } }; 123456 ЗЗААППЯЯТТААЯЯ
  • 4. Манипуляции • CRUD свойств • Вложенные объекты • Передача по ссылке всегда myObject.myProperty == myObject[‘myProperty’] myObject.FOO myObject.FOO.BAR myObject.FOO && myObject.FOO.BAR undefined TypeError undefined for (myProperty in myObject) {…}
  • 5. Object.prototype • Добавление свойств во все экземпляры: myPerson.prototype.provider = ‘WebStream’ •Расширение встроенных объектов Array, String: Array.prototype.forEach Array.prototype.filter Array.prototype.splice String.prototype.htmlEncode String.prototype.trim String.prototype.replace •При удалении свойства у объекта будет “просвечивать” то же свойство его прототипа
  • 6. Конструктор: Запись var Person = function (name) { this.name = name; this.say = function () { return "I am " + this.name; }; }; 123456
  • 7. Конструктор: Неявные действия var Person = function (name) { var this = Object.create(Person.prototype); this.name = name; this.say = function () { return ‘I am ‘ + this.name; }; return this; }; Конструктор может возвращать любой объект 1 a 2345 b 6
  • 8. Отсутствие ‘new’ не ошибка = this.member == window.member • constructor - UpperCamelCase • methods - lowerCamelCase
  • 9. Конструктор: проверка this function Person(name) { if (!(this instanceof Person)) { return new Person(name); } this.name = name; } 123456
  • 10. Приватные свойства: В конструкторе Решение – замыкание (closure) function Person() { var gender = ‘Female’; this.getGender = function () { return gender; }; } • Возвращенный объект можно изменить: – возвращать только то, что надо – возвращать копию объекта 1 2345 6
  • 11. Приватные свойства: Без конструктора Anonymous Immediate Function (Анонимное замыкание) var myPerson = (function () { var gender = ‘Female’; return { getGender: function () { return gender; } }; }()); 1 2345 678
  • 12. Статические свойства: Публичные var Person = function () { }; Person.getSpecies = function () { return ‘Homo sapiens’; }; 1 2 3 4 • Статический метод не запустится на объекте • Объектный метод не запустится как статический
  • 13. Статические & объектные методы var Person = function (name) { this.name = name; }; Person.getSpecies = function () { var msg = ‘Homo sapiens’; if (this instanceof Person) { msg += ‘, named ‘ + this.name; } return msg; }; Person.prototype.getSpecies = function () { return Person.getSpecies.call(this); }; 123 456789 10 11 12 13
  • 14. Статические свойства: Приватные • разделены между объектами, которые созданы одним конструктором • не доступны вне конструктора var Person = (function () { var counter = 0, NewPerson; NewPerson = function () { counter += 1; }; NewPerson.prototype.getCount = function () { return counter; }; return NewPerson; }()); 123456789 10
  • 15. Константы • ALL_CAPS ИХ НЕТ • Объект Constant с методами: –set(name, value) – isDefined(name) –get(name)
  • 16. Цепочки объектов (chaining) myObj.method1(‘hello’).method2().method3(‘world’); return this; изящно специализировано train wreck
  • 17. Правда о наследовании • Нет классов как класса • "Функция-конструктор" - более аккуратная замена термина "класс" • "Экземпляр класса" не имеет того смысла • Но есть слово «new» • Object.prototype • Объекты создаются на основе других объектов • Объекты - это просто пары «ключ»-«значение» • “Prefer object composition to class inheritance.” GoF
  • 18. Наследование классами: Функция inherit(C, P) КОНСТРУКТОР PARENT КОНСТРУКТОР CHILD inherit (child, parent); НАСЛЕДНИК
  • 19. Наследование классами: Обычный способ function Parent(name) { this.name = name || 'Adam'; } Parent.prototype.say = function () { return this.name; }; function Child(name) { }; inherit(Child, Parent); function inherit(C, P) { C.prototype = new P(); } 1 234567 8 9 10 11 • Нет передачи параметров • Потомку передается весь Родитель, а не его prototype
  • 20. Наследование классами: Святой Грааль var inherit = (function () { var F = function () { }; return function (C, P) { F.prototype = P.prototype; C.prototype = new F(); C.uber = P.prototype; C.prototype.constructor = C; } }()); 1 23456789
  • 21. Наследование классами: Картинка new Parent() name = Adam prototype: say() new F() prototype new Child() prototype constructor = Child uber
  • 22. Наследование классами лучше избегать • Технически классов в JavaScript не существует • Путаница в терминологии и реализации • Подобный подход можно использовать, если разработчик не умеет работать с прототипами, а умеет с классами • Повторно использовать код можно и без "классического" наследования
  • 23. Наследование прототипами if (typeof Object.beget !== 'function') { Object.beget = function (o) { var F = function () { }; F.prototype = o; return new F(); }; } var anotherPerson = Object.beget(person); Объекты наследуются от объектов 1 234567 8
  • 24. Наследование копированием свойств 1. shallow copy 2. deep copy function extend(parent, child) { var i; child = child || { }; for (i in parent) { if (parent.hasOwnProperty(i)) { child[i] = parent[i]; } } return child; } Prototype не участвуют. Только СОБСТВЕННЫЕ свойства объектов
  • 25. Одалживание (borrowing) методов методы объекта «Функция» CALL и APPLY objFOO.myMethod.call(objBAR, param1, p2, p3); objFOO.myMethod.apply(objBAR, [param1, p2, p3]); • В методе objFOO.myMethod() вместо this подставляется objBAR • Нужны только те свойства, которые используются в методе • Не надо строить иерархию наследования ради нескольких методов
  • 26. Спасибо за внимание, вопросы 1. Создание: Из пустого объекта { } 2. Создание: Сразу {…} 3. Манипуляции 4. Конструктор: Запись 5. Конструктор: Неявные действия 6. Отсутствие “new” не ошибка 7. Конструктор: проверка this 8. Приватные свойства: В конструкторе 9. Приватные свойства: Без конструктора 10. Статические свойства: Публичные 11. Статические & объектные методы 12. Статические свойства: Приватные 13. Константы 14. Цепочки объектов 15. Правда о наследовании 16. Наследование классами: Функция inherit(C, P) 17. Наследование классами: Обычный способ 18. Наследование классами: Святой Грааль 19. Наследование классами: Картинка 20. Наследование классами лучше избегать 21. Наследование прототипами 22. Наследование копированием свойств 23. Одалживание (borrowing) методов