Ссылочный тип
Типы ссылок в основном включают в себя: тип объекта, тип массива, тип даты, тип regexp, тип функции и т. Д.
Когда используются эталонные типы, из них необходимо сгенерировать объект (экземпляр). Другими словами, эталонный тип эквивалентен шаблону. Когда мы хотим использовать определенный тип ссылки, нам нужно использовать этот шаблон для генерации объекта для использования, поэтому тип ссылки иногда называют определением объекта.
Например, нам нужно генерировать объект человека для определения чьей -то личной информации и поведения, поэтому нам нужно полагаться на тип объекта:
var person = new object (); person.name = "jiangshui"; person.sayname = function () {console.log (this.name);}Вышеупомянутый объект определяется «шаблоном» с использованием нового оператора, используя тип объекта. После этого вы можете добавить имя атрибута и метод SayName в этот объект. Свойства и методы являются «функциями» типов объектов, поэтому могут использоваться объекты, созданные с помощью эталонных типов, таких как объект.
Создание объекта не обязательно требует использования нового оператора. Есть некоторые типы, которые могут быть упрощены при создании. Например, создание объекта типа, как указано выше, вы также можете использовать следующие два метода:
var person = {}; person.name = "jiangshui";или
var person = {name: "jiangshui", sayname: function () {console.log (this.name); }};Функция оператора {} такая же, как New Object (), упрощающий операции. Есть некоторые различия в двух вышеупомянутых методах письма. Первым является «Приложение», то есть в предыдущем определении продолжает добавлять атрибуты или методы. Если метод атрибута того же имени уже существует ранее, он будет перезаписан. Второй тип - «замена», что означает, что независимо от того, определены ли свойства и методы объекта личности, этот метод заменит ранее определенное содержание на недавно определенное содержание. Поскольку объект, сгенерированный типом эталона, представляет собой область, хранящуюся в памяти, а затем его указатель сохраняется в определенной переменной (человек), второй способ написания - это генерирование нового объекта (новая область памяти), а затем указать переменную человека на новую область памяти, поэтому предыдущий заменяется. Понимание этого имеет решающее значение для более позднего понимания.
Использование других эталонных типов примерно одинаково, например, тип массива, который также может использоваться для генерации объектов или непосредственно их определения. После генерации объекта массива вы можете сохранить информационный контент в формате массива. Кроме того, объект получит методы, определенные в типе массива, такие как Push, Shift, Sort и т. Д., И вы можете назвать эти методы, такие как:
var colors = []; colors.push ('red', 'green'); console.log (colors);Приведенный выше код создает объект типа массива через тип массива, затем вызывает метод push, определяемый ранее в типе массива, добавляет два значения красные и зеленые к объекту и, наконец, печатает его на консоли, и вы можете увидеть его.
Вызовать и применить методы
Эти два метода предоставляются типом функции, что означает, что их можно использовать на функциях. Функция вызова такая же, как и метод применения, который состоит в том, что он может расширить объем работы функции. Разница в том, что при использовании вызова параметры, передаваемые функции, должны быть перечислены один за другим, но метод применения не использует его. Таким образом, вы можете принять решение использовать Call или применить в соответствии с требованиями вашей собственной функции.
Что означает масштаб работы функции расширения? Вы поймете, приведя пример.
Таким образом, вы можете понять, что функция обернута в контейнер (область применения), и в этом контейнере есть некоторые переменные или другие вещи. Когда функция работает, эти переменные вызываются и т. Д., Вы найдете эту вещь в текущем контейнере. Этот контейнер фактически завершает больший контейнер снаружи. Если текущий небольшой контейнер не имеет его, функция будет искать в более крупном контейнере и т. Д., И найти самый большой объект окна контейнера. Однако, если функция работает в текущем небольшом контейнере, в небольшом контейнере существуют соответствующие переменные и т. Д., Даже в большом контейнере функция все равно будет вызывать его в своем собственном контейнере.
Методы вызова и применения должны решить эту проблему и пробить ограничения контейнеров. Что касается предыдущего примера:
var person = {name: "jiangshui", sayname: function () {console.log (this.name); }};После открытия хромированной консоли, вставьте ее и выполните ее, а затем выполните Person.sayname (), чтобы увидеть
В настоящее время человек - это контейнер, который создает метод Sayname (функция). При выполнении он должен быть выполнен под прицелом человека. При непосредственном выполнении внизу, то есть выполнение под прицелом окна приведет к определению ошибки, поскольку метод SAYNAME не определен ниже окна. Этот указатель внутри - особенная вещь, которая указывает на текущую область. Значение этого.
Далее мы добавляем атрибут имени в объект Window:
window.name = "yujiangshui";
Или напрямую
name = "yujiangshui";
Поскольку окно является самым большим контейнером, окно может быть опущено. Все определенные атрибуты или переменные прикреплены к окну. Если вы не верите в это, вы можете увидеть:
Теперь мы хотим запустить метод Sayname в маленьком контейнере человека под большим контейнером окна. Нам нужно использовать вызов или применить для расширения объема метода SayName. Выполнить следующее оператор:
person.sayname.call (window);
или
person.sayname.call (это);
Выходные результаты одинаковы. Вы также можете использовать применимость, чтобы увидеть эффект, потому что эта демонстрация слишком проста и не требует передачи параметров, поэтому функции вызова и применения полностью согласованы.
Позвольте мне объяснить приведенный выше код. SayName - это первое экземпляр типа функции, который имеет метод вызова и метод применения. Поскольку методы вызова и применения являются методами функции, нам нужно позвонить в Person.sayname.call (окно) таким образом, а не Person.sayname (). Call (Window) и так далее.
Затем параметры методов вызова и применения - это область применения (объект), указывая на то, что предыдущая функция выполняется под применением.
Почему проходящее окно, и это имеет тот же эффект? Поскольку текущее местоположение выполнения этой функции является окном, как упоминалось ранее, этот указатель указывает на текущую область, поэтому этот указатель указывает на окно, так что он равен окну.