Расширенные объекты Javascript

Часть 19

Давайте поговорим о некоторых сложных концепциях объектов, хотя я предупреждаю вас, что вряд ли вы сразу их поймете.

С объектами важны три вещи: ссылочный тип, контекст и создание.

Тип ссылки

Как вы думаете, что произойдет, если я это сделаю?

Посмотрим:

Что, если я сделаю это:

Снова давайте посмотрим на ответ:

Как насчет этого?

Теперь, если я пойду:

Что, если я сделаю:

На первый взгляд, object1 и object3 одинаковы; они имеют одинаковую ценность. Тем не менее, когда я говорю, что объект1 равен объекту3, я получаю false.

Давай проверим что-нибудь еще.

Что, если я сделаю:

Теперь, если я проверю значение Object2:

Но если я сейчас проверю значение object3: все равно 10!

Давайте посмотрим, что происходит на самом деле.
см. Диаграмму ниже:

Объекты - это так называемые ссылочные типы в Javascript. Ранее мы видели другие типы javascript (null, числа, строки, логические значения, undefined, символы). Эти непохожие объекты (ссылочные типы) определяются языком программирования (javascript) - они являются примитивными типами.

ссылочный тип, с другой стороны, не является примитивным типом - он не определяется языками программирования - они создаются программистом.

Итак, когда мы говорим переменную

Программа знает 2; Это непреложно.

Однако когда мы это создали:

Это ссылочные типы - они созданы нами. Мы сказали, что хотим, чтобы object1 создал новый объект и сохранил в нем значение 10.

Object2 говорит: я хочу, чтобы вы просто сослались - и отсюда и произошло слово - object1;, означающее «Я хочу, чтобы все, что находится внутри коробки. объект1 создан ».

Но когда создается object3, это новый объект. Он имеет новые скобки и гласит: «Поместите значение 10 в это поле».

Итак, object2 ссылается на object1; object3 создает новый объект.

Итак, наш пример здесь имеет смысл:

Когда мы меняем значение object1 на 15, мы изменяем содержимое Box1 - и, следовательно, значение object2, потому что оно ссылается на то же поле.

Однако значение object3 не меняется, поскольку его интересует совершенно другой блок - Box3.

Теперь массивы - это просто объекты в конце дня. Итак, когда вы создаете массив, это то же самое, что создание блока - структуры данных.

На приведенной выше иллюстрации, по сути, у вас есть два массива - две структуры данных. И, как мы видели с ссылочным типом, они не могут быть одинаковыми .

Контекст

Контекст сильно путается с областью действия ; Если вы помните, мы говорили, что scope создается, когда видит фигурные скобки.

Теперь контекст сообщает вам, где вы находитесь внутри объекта.

Позволь мне объяснить:

Когда мы говорим console.log (this) - обратите внимание, что this является особым миром в Javascript - мы получаем объект window.

Просто чтобы дважды проверить, если я:

И теперь я могу получить доступ к this.alert («привет»):

Здесь я получаю предупреждение, потому что, как мы видели, то, что слева от точки (.) - это объект окна - this - это объект окна.

И почему это важно?
Это важно для создания экземпляра -, о котором мы поговорим дальше. Просто помните, что this относится к тому объекту, внутри которого мы находимся.

Давайте подробнее остановимся на этом:

Поэтому, если я вызываю a, я получаю объект окна, потому что мы сейчас внутри объекта окна.

Чтобы создать новое значение для this, вы должны сделать что-то вроде этого;

Это важно, когда мы выполняем создание экземпляра, то есть когда вы делаете копию объекта и повторно используете код.

Хороший пример - игроки в игре; если вы создаете большую многопользовательскую онлайн-игру с большим количеством игроков - у вас могут быть тролли, чернокнижники - и создание объекта для каждого отдельного игрока потребует много работы и повторения кода.
Чтобы решить эту проблему, вы можете создать экземпляр - вы делаете экземпляры или несколько копий одного объекта игрока.

Допустим, у нас есть класс Player:

Думайте о классе как о чем-то, что я хочу скопировать.
С помощью Constructor, когда вы создаете класс, например, в данном случае Player, каждый раз, когда я делаю копию Player первое, что запускается, - это функция constructor. Конструктор создает два свойства для объекта Player - имя, тип.

Теперь я могу создавать для Player все, что захочу.

Допустим, мы хотим создать такой метод, как Introduction ():

Итак, теперь я говорю, что любой созданный мной игрок всегда сможет представиться, и у него также будут this.name и this.type .

И причина, по которой мы используем здесь this, заключается в том, что при создании Player мы можем получить доступ к свойству name и type.

Итак, теперь, если я хочу создать, скажем, волшебника:

Здесь мы говорим, что хотим, чтобы wizard расширил все, что есть у Player - поэтому добавьте поверх всего, что Player имеет.

Но обратите внимание, что каждый раз, когда мы что-то расширяем, мы должны вызывать super со свойствами, которые мы передаем конструктору (name, type). Мы хотим иметь возможность вызывать функция constructor player.

А так как это класс, мы должны создать конструктор, в этом случае принимающий имя, тип.

Теперь предположим, что с помощью мастера мы также хотим иметь функцию play.

Теперь у нас есть Wizard, и мы можем легко создавать разных мастеров вместо того, чтобы постоянно создавать Players, а затем создавать своих собственных мастеров, которые могут играть.

Ладно, давайте здесь все пройдемся.

У нас есть класс Player, а затем класс Wizard, расширяющий Player.

И затем у нас есть две переменные, которые мы создали wizard1 и Wizard2.

Теперь программа увидит ключевое слово new, и каждый раз, когда она увидит ключевое слово new, она скажет: о! мы создаем нового мастера, и этот мастер будет иметь два параметра: Shelly и Healer.

Итак, он снова перейдет к Wizard классу, потому что в нем есть это новое слово; он говорит: «Эй! Wizard Я хочу, чтобы вы расширили Player ».

Итак, он перейдет к конструктору, и он увидит super, и что он делает, это переносит нас к конструктору Player.

На этом этапе this является мастером, а функция new добавляет функцию play.

Теперь, если я перейду к wizard1 и скажу play, я получу «WEEEEEEE, я целитель».

Увидимся в 20-й части