Объектно-ориентированный JavaScript (OOJS) 3 способа создания экземпляров объектов
Когда язык программирования все об объектах, первое, что нам нужно выучить, это как создавать объекты. Создать объекты в JavaScript довольно просто: пара фигурных скобок будет делать работу, однако, это ни единственный путь создать объект ни единственный путь вам когда-нибудь нужно будет использовать.
В JavaScript экземпляры объектов созданный из встроенных объектов и появиться, когда программа работает. Например, Дата
это встроенный объект, который дает нам информацию о датах. Если мы хотим показать текущую дату на странице, мы нужен экземпляр времени выполнения Дата
которая несет информацию о текущей дате.
JavaScript также позволяет нам определить наши собственные объекты которые могут создавать свои собственные экземпляры объектов во время выполнения. В JavaScript, все является объектом и каждый объект имеет предок называется объект
. Создание экземпляра объекта называется конкретизации.
1. новый
оператор
Одним из наиболее распространенных и известных методов создания нового экземпляра объекта является с использованием новый
оператор.
Тебе необходимо конструктор сделать новый
операторская работа. Конструктор - это метод объекта, который объединяет новый экземпляр этого объекта. Его основной синтаксис выглядит так:
новый конструктор ()
Конструктор может принимать аргументы которые могут быть использованы для изменения или добавления свойств к экземпляру объекта, который он создает. Конструктор имеет то же имя как объект, к которому он принадлежит.
Вот пример того, как создать экземпляр Дата()
объект с новый
ключевое слово:
dt = новая дата (2017, 0, 1) console.log (dt) // вс 01 янв. 2017 00:00:00 GMT + 0100
Дата()
является конструктором для создания нового Дата
объект. Различные конструкторы для объекта принимать разные аргументы создать тот же вид экземпляров объекта с разнообразные атрибуты.
Не все встроенные объекты в JavaScript могут быть созданы как Дата
. Есть объекты, которые не приходи с конструктором: математический
, JSON
а также отражать
, но они все еще обычные объекты.
Среди встроенных объектов, которые имеют конструктор (ы), Условное обозначение
нельзя вызывать в стиле конструктора создать новый экземпляр Условное обозначение
пример. Это может быть только вызывается как функция который возвращает новый Условное обозначение
значение.
Кроме того, среди встроенных объектов, которые имеют конструктор (ы), не все нуждаются в вызове своих конструкторов с помощью новый
оператор для того, чтобы быть создан. функция
, массив
, ошибка
, а также RegExp
также можно вызывать как функции, без использования новый
ключевое слово, и они будут создавать экземпляры и возвращать новый экземпляр объекта.
2. The отражать
объект
Бэкэнд-программисты могут быть уже знакомы с API отражения. Отражение - это особенность языков программирования для проверять и обновлять некоторые основные объекты, такие как объекты и классы, во время выполнения.
В JavaScript вы уже могли выполнять немного операции отражения с использованием объект
. Но, правильный API Reflection в конце концов появился и в JavaScript.
отражать
Объект имеет набор методов для создавать и обновлять экземпляры объектов. отражать
объект не имеет конструктора, поэтому его нельзя создать с помощью новый
оператор, и так же, как математический
а также JSON
, Это не может быть вызвана как функция или.
тем не мение, отражать
имеет эквивалент новый
оператор: Reflect.construct ()
метод.
Reflect.construct (target, argumentsList [, newTarget])
Оба цель
и необязательный newTarget
аргументы объекты, имеющие свои собственные конструкторы, в то время как argumentsList
это список аргументов быть переданным конструктору цель
.
var dt = Reflect.construct (Дата, [2017, 0, 1]); console.log (дт); // Вс 01 января 2017 00:00:00 GMT + 0100
Код выше имеет тот же эффект как экземпляр Дата()
с использованием новый
оператор. Хотя вы все еще можете использовать новый
, Отражение Стандарт ECMAScript 6. Это также позволяет вам использовать newTarget
аргумент, что является еще одним преимуществом перед новый
оператор.
Значение newTarget
прототип (а точнее, это прототип newTarget
конструктор) становится прототипом вновь созданного экземпляра.
Прототип является свойство объекта, значение которого также объект, несущий свойства исходного объекта. Короче говоря, объект получает своих членов от своего прототипа.
Вот, давайте посмотрим пример:
класс A constructor () this.message = function () console.log ('message from A') класс B constructor () message () console.log ('message from B') data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // сообщение из A console.log (obj.data ()); // данные из B console.log (obj instanceof B) // true
Мимоходом В
в качестве третьего аргумента Reflect.construct ()
, значение прототипа OBJ
объект сделано, чтобы быть таким же как прототип В
конструктор (который имеет свойства сообщение
а также данные
).
таким образом, OBJ
может получить доступ к сообщение
а также данные
, доступно по прототипу. Но с тех пор OBJ
сделано с использованием , у него также есть свой
сообщение
Это полученные от .
Даже если OBJ
построен как массив, это не пример массив
, потому что его прототип установлен на объект
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
может быть полезным, когда вы хотите создать объект используя более одного проекта.
3. The Object.create ()
метод
Вы также можете создать новый обычный объект с конкретным прототипом с помощью Object.create ()
. Это тоже может показаться очень похожим на использование новый
оператор, но это не так.
Object.create (O [, propertiesObject])
О
аргумент является объектом, который служит прототипом для нового объекта, который будет создан. Необязательный propertiesObject
аргумент список свойств Вы можете добавить к новому объекту.
class A constructor () message () console.log ('message from A') var obj = Object.create (new A (), data: writable: true, настраиваемый: true, значение: function () return 'data from obj') console.log (obj.message ()) // сообщение из A console.log (obj.data ()) // данные из obj obj1 = Object.create ( new A (), foo: writable: true, настраиваемый: true, value: function () return 'foo from obj1') console.log (obj1.message ()) // сообщение от консоли. log (obj1.foo ()) // foo из obj1
в OBJ
объект, добавленное свойство данные
, пока в obj1
, его Foo
. Итак, как вы видите, мы можем иметь свойства и методы, добавленные в новый объект.
Это здорово, когда вы хотите создать несколько объектов одного вида но с различные дополнительные свойства или методы. Object.create ()
синтаксис избавляет от необходимости кодировать их все по отдельности.