me@helium vor 7 Jahren
Ursprung
Commit
121ab8f714
3 geänderte Dateien mit 109 neuen und 2 gelöschten Zeilen
  1. 1 1
      02.md
  2. 107 0
      07.md
  3. 1 1
      README.md

+ 1 - 1
02.md

@@ -302,7 +302,7 @@ switch (color){
 }
 ```
 
-`break` в `switch` обеспечивает переход на конец конструкции `switch` (т. е. на код, следущий за `}`. Если `break` не поставить, то можно объединить
+`break` в `switch` обеспечивает переход на конец конструкции `switch` (т. е. на код, следущий за `}`). Если `break` не поставить, то можно объединить
 несколько `case` в один:
 
 ```javascript

+ 107 - 0
07.md

@@ -0,0 +1,107 @@
+# Начала Объектно-Ориентированного Программирования.
+
+## Ассоциативный массив как объект
+
+Объекты в **JS** совпадают с ассоциативными массивами. Наряду со строками, числами и прочими типами данных, вы можете занести в ассоциативный
+массив функцию:
+
+```javascript
+var person = {
+    name: "Ivan",
+    surname: "Ivanov",
+    alert: function(text){
+        alert(text);
+    }
+}
+
+var person2     = {};
+person2.name    = "Donald";
+person2.surname = "Trump";
+person2.alert   = function(text){
+    alert(text);   
+}
+
+person.alert(person.name);
+person2.alert(person2.name);
+```
+
+Таким образом вы можете объединять код и данные в одной структуре. Возможность объединения  данных и кода, который с ними работает, в одном *объекте*
+является одной из основополагающих свойств ООП и называется **инкапсуляцией**. Функция, которая относится к объекту, называется **методом**.
+
+## `this`
+
+Для обращения к полям *этого* объекта применяется ключевое слово `this`, которая ссылается на объект, к которому относится этот метод:
+
+```javascript
+var person = {
+    name: "Ivan",
+    surname: "Ivanov",
+    sayHi: function(text){
+        alert("Hi, this.getFullName());
+    }
+
+    getFullName: function(){
+        return this.surname + " " + this.name
+    }
+}
+
+person.sayHi()
+```
+
+`this` обычно равен тому, что написано перед точкой при вызове (`person.sayHi()` - `this` будет равен `person`)
+
+## Функция - Конструктор
+
+Для создания объектов определенного типа применяется **функция-конструктор**, результатом работы которой становится новый объект. Вызов конструктора
+происходит не обычным способом, а с использованием оператора `new`
+
+```javascript
+function Person(){
+}
+
+var person = new Person()
+```
+
+Пример выше создает пустой объект с именем класса `Person`:
+
+```javascript
+person
+typeof person
+```
+
+По всеобщей договоренности, функции-конструкторы именуются с большой буквы (`Person`). Для создания нового объекта используется оператор `new`, 
+который создает пустой объект, заносит в него определенное множество технической информации и передает его как `this` в конструктор:
+
+
+```javascript
+function Person(name, surname){
+    this.name    = name
+    this.surname = surname
+}
+
+var person = new Person("Ivan", "Petroff")
+```
+
+Обратите внимание, что конструктор ничего не возращает, используя `return`. Считается что он возвращает новый объект, для этого достаточно просто 
+заполнить нужные поля в `this`.
+
+## Методы
+
+Так же как данные, мы можем задать определенные методы объекту:
+
+```javascript
+function Person(name, surname){
+    this.name    = name
+    this.surname = surname
+
+    this.getFullName = function(){
+        return this.name + (this.fatherName ? " " + this.fatherName + " " : " ") + this.surname
+    }
+}
+
+var person        = new Person("Ivan", "Petroff")
+alert(person.getFullName())
+
+person.fatherName = "Sydorych"
+alert(person.getFullName())
+

+ 1 - 1
README.md

@@ -58,8 +58,8 @@
 7. Начала ООП
     * {}
     * Поля ассоциативного массива как методы
-    * Конструктор
     * this
+    * Конструктор
     * new
     * Консультирование по проекту, подбор инструментов, первоначальное проектирование