diff options
Diffstat (limited to 'content/digarden/pages/20221114142614-ооп_в_javascript.org')
-rw-r--r-- | content/digarden/pages/20221114142614-ооп_в_javascript.org | 86 |
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 + + |