Об'єктно-орієнтований JavaScript (OOJS) 3 способу створення об'єктів об'єктів
Коли використовується мова програмування все про об'єкти, Перше, що нам треба вчитися - це як створювати об'єкти. Створення об'єктів у JavaScript досить просто: пара фігурних дужок буде робити цю роботу, однак ні єдиним способом для створення об'єкта ні єдиним способом вам доведеться використовувати.
У JavaScript об'єкти об'єктів є створені з вбудованих об'єктів і прийти до існування, коли програма запущена. Наприклад, Дата
є вбудованим об'єктом, який дає нам інформацію про дати. Якщо ми хочемо показати поточну дату на сторінці, ми потрібна екземпляр середовища виконання Дата
що містить інформацію про поточну дату.
JavaScript також дозволяє нам визначити наші власні об'єкти які можуть створювати власні екземпляри об'єктів під час виконання. У JavaScript, все є об'єктом і кожен об'єкт має кінцевий предок називається Об'єкт
. Створюється екземпляр об'єкта реалізація.
1. новий
оператора
Одним з найбільш поширених і відомих методів створення нового об'єкта об'єкта є за допомогою новий
оператора.
Вам потрібно a конструктор зробити новий
роботи оператора. Конструктор - це метод об'єкта, який об'єднує a новий екземпляр цього об'єкта. Його основний синтаксис виглядає так:
новий конструктор ()
Конструктор може приймати аргументи які можуть бути використані для зміни або додавання властивостей об'єкта об'єкта, який він будує. Конструктор має однакову назву як об'єкт, до якого він належить.
Ось приклад, як створити екземпляр Дата()
об'єкт з новий
ключове слово:
dt = new Дата (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100
Дата()
є конструктором для створення нового Дата
об'єкт. Різні конструктори для об'єкта приймати різні аргументи створити один і той же тип об'єктів з різноманітні атрибути.
Не всі вбудовані об'єкти в JavaScript можуть бути подібні Дата
. Є об'єкти, які не приходьте з конструктором: Математика
, JSON
і Відображати
, але вони все ще звичайні об'єкти.
Серед вбудованих об'єктів, які мають конструктор (и), Символ
не можна викликати в стилі конструктора створити новий Символ
наприклад. Це може бути тільки називається функцією який повертає нове Символ
значення.
Крім того, серед вбудованих об'єктів, які мають конструктор (и), не всім потрібні їхні конструктори для виклику з новий
оператора, щоб бути створеним. Функція
, Масив
, Помилка
, і RegExp
також можна називати функціями, без використання новий
ключове слово, і вони створюватимуть і повертають новий об'єкт об'єкта.
2. Відображати
об'єкт
Можливо, програмістам, з якими вони працювали, вже знайомі API відображення. Відображення є особливістю мов програмування перевіряти та оновлювати деякі основні об'єкти, такі як об'єкти та класи, під час виконання.
У JavaScript ви вже можете виконувати дещо операції відображення з використанням Об'єкт
. Але, a відповідний API відображення зрештою з'явився і в JavaScript.
The Відображати
Об'єкт має набір методів створювати та оновлювати екземпляри об'єктів. The Відображати
об'єкт не має конструктора, тому його не можна інсталювати за допомогою новий
оператора, і, точно так само Математика
і JSON
, це не можна викликати як функцію або.
Однак, Відображати
має еквівалент новий
оператора: Reflect.construct ()
метод.
Reflect.construct (target, argumentsList [, newTarget])
Обидва мету
і необов'язково newTarget
аргументи об'єкти, що мають власні конструктори, час Список аргументів
є Список аргументів передається до конструктора мету
.
var dt = Reflect.construct (дата, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100
Код вище має той же ефект як інстанції Дата()
за допомогою новий
оператора. Хоча ви все ще можете використовувати новий
, Відображення є Стандарт ECMAScript 6. Це також дозволяє використовувати newTarget
аргумент, що є ще однією перевагою перед новий
оператора.
Значення newTarget
Російський прототип (а точніше, це прототип newTarget
Конструктор користувача стає прототипом новоствореного екземпляра.
Прототипом є властивість об'єкта, значення якого є також об'єкт, несуть властивості вихідного об'єкта. Коротше кажучи, об'єкт отримує своїх членів від свого прототипу.
Ось приклад:
class конструктор () this.message = function () console.log ('повідомлення від') клас B конструктор () повідомлення () console.log ('повідомлення від B') data () console.log ('дані з B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // повідомлення з A console.log (obj.data ()); // дані з B console.log (obj instanceof B) // true
Шляхом проходження B
як третій аргумент Reflect.construct ()
, значення прототипу obj
об'єктом є зроблено таким же як прототип Росії B
Конструктор (має властивості) повідомлення
і даних
).
Таким чином, obj
може отримати доступ до повідомлення
і даних
, наявний у його прототипі. Але, так obj
використовується A
, вона також має свою повідомлення
це отримано від A
.
Незважаючи на obj
будується як масив не примірник Масив
, тому що його прототип встановлений на Об'єкт
.
obj = Reflect.construct (масив, [1,2,3], об'єкт) console.log (obj) // масив [1, 2, 3] console.log (obj instanceof Array)
Reflect.construct ()
може бути корисним, коли потрібно створити об'єкт використання більш ніж одного плану.
3. Object.create ()
метод
Ви також можете створити a новий звичайний об'єкт з конкретним прототипом через Object.create ()
. Це також може здатися дуже схожим на використання новий
оператора, але це не так.
Object.create (O [, propertiesObject])
The O
Аргумент є об'єктом, який служить прототипу для нового об'єкта, який буде створено. Необов'язковий propertiesObject
аргумент a список властивостей можна додати до нового об'єкта.
class A конструктор () повідомлення () console.log ('повідомлення від A') var obj = Object.create (новий A (), data: writeable: true, configurable: true, value: function () return 'data з obj') console.log (obj.message ()) // повідомлення з A console.log (obj.data ()) // дані з obj1 = Object.create () new A (), foo: writable: true, configurable: true, value: function () return 'foo з obj1') console.log (obj1.message ()) // повідомлення з консолі A. log (obj1.foo ()) // foo з obj1
В obj
об'єкт, додається властивість даних
, перебуваючи в obj1
, його foo
. Отже, як бачите, ми можемо мати властивості та методи, додані до нового об'єкта.
Це чудово, коли ви хочете створити декілька об'єктів одного виду але з різні додаткові властивості або методи. The Object.create ()
Синтаксис зберігає труднощі кодування всіх їх окремо.