summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20221114142614-ооп_в_javascript.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20221114142614-ооп_в_javascript.org')
-rw-r--r--content/digarden/pages/20221114142614-ооп_в_javascript.org86
1 files changed, 86 insertions, 0 deletions
diff --git a/content/digarden/pages/20221114142614-ооп_в_javascript.org b/content/digarden/pages/20221114142614-ооп_в_javascript.org
new file mode 100644
index 0000000..da2ceaf
--- /dev/null
+++ b/content/digarden/pages/20221114142614-ооп_в_javascript.org
@@ -0,0 +1,86 @@
+:PROPERTIES:
+:ID: 3df0aee3-71c5-4c3e-8833-85bd9db7093c
+:END:
+#+title: ООП в Javascript
+* ООП в Javascript
+** Создание простого блюпринта
+*** Constructor function
+#+begin_src js
+ function Human (firstName, lastName) {
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+#+end_src
+
+*** Class
+#+begin_src js
+ class Human {
+ constructor(firstName, lastName) {
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+ }
+#+end_src
+
+*** Objects Linking to Other Objects (OLOO)
+#+begin_src js
+ const Human = {
+ init (firstName, lastName ) {
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+ }
+
+ const chris = Object.create(Human).init('Chris', 'Coyier')
+#+end_src
+
+*** Factory functions
+#+begin_src js
+ function Human (firstName, lastName) {
+ return {
+ firstName,
+ lastName
+ }
+ }
+#+end_src
+
+*** Методы
+Методы лучше всего определять в Prototype, так как тогда все инстансы
+будут использовать одну функцию, а не иметь непосредственно уникальную
+функцию в инстансе (т.е. дублировать функции по сути).
+
+** Наследование
+*** Класс
+#+begin_src js
+ class Child extends Parent {
+ // ... Stuff goes here
+ }
+
+ class Developer extends Human {
+ constructor(firstName, lastName) {
+ super(firstName, lastName)
+ }
+ }
+
+ const chris = new Developer('Chris', 'Coyier')
+#+end_src
+
+*** Прототипы
+Остальные методы наследования подразумевают ручное изменение прототипа.
+
+** Модификаторы доступа
+*** Public
+По дефолту всё Public и как таковых модификаторов доступа в Javascript и нет
+*** Private
+Не так давно добавили настоящие приватные поля и методы при помощи ~#~
+#+begin_src js
+ this.#fuel = 50
+#+end_src
+
+*** Private by convention
+Можно как в питоне приватные вещи помечать подчеркиванием ~_~
+#+begin_src js
+ this._fuel = 50
+#+end_src
+
+