Обзор
О чем мы говорим, когда говорим о объектно-ориентированном программировании?
Сначала мы говорим о некоторых понятиях: объекты, классы, инкапсуляции, наследование, полиморфизм.
Объекты и классы являются основой объектно-ориентированной, а инкапсуляция, наследование и полиморфизм являются тремя основными особенностями объектно-ориентированного программирования.
JavaScript предоставляет объекты, но не имеет классов, и он не может явно определить класс, такой как C#.
Тем не менее, функции функций JavaScript очень гибки, одним из которых является конструктор, который может реализовать «классы» в сочетании с конструкторами и объектами прототипа.
Объекты и классы концепции
Объект
«Объект» является очень важной концепцией в объектно-ориентированном программировании. Объект - это описание «вещь» (кто -то или что -то в этом роде).
Люди и вещи приходят из реальной жизни, и наше понимание реального мира - это наше понимание людей и вещей.
В области программирования код является абстрактным для обычных людей, а применение кода-лучше решить реальные проблемы.
На этапах анализа и проектирования концепция «объекта» может лучше отражать реальные проблемы.
И наоборот, код содержит некоторую логику, которая используется для описания бизнеса. Бизнес содержит некоторые знания бизнеса. Бизнес -знания суммируются посредством понимания и анализа реального мира. Эти проблемы состоят из «объектов» в реальном мире.
Объекты содержат особенности и поведение. С точки зрения ООП, функции являются атрибутами объектов, а поведение являются методами объектов.
добрый
В реальном мире аналогичные объекты могут быть сгруппированы в соответствии с определенными стандартами. Например, «колибри» и «орлы» делятся на птиц. Птицы не являются конкретными объектами. Они представляют собой концепцию, обобщенную людьми после анализа аналогичных характеристик и поведения на основе конкретных птиц, таких как «колибри» и «Орлы». Класс эквивалентен шаблону, и мы можем создавать различные конкретные объекты на основе этого шаблона.
В C#мы можем определить птицу.
/// <summary> /////////// </summary> public class bird {public void fly () {console.writeline ("Я могу летать!"); }}Хотя JavaScript является объектно-ориентированным языком программирования, он не обеспечивает синтаксисную поддержку для класса.
В JavaScript все основано на объектах. Даже «прототип», о котором мы поговорим позже, являются объектами. Наследование и повторное использование JavaScript также реализуются с помощью прототипов.
Тем не менее, объединение конструкторов и объектов прототипа может реализовать «классы» JavaScript.
Конструктор
Ранее мы использовали новый массив () для создания массива и использовали новый объект () для создания объекта. Array () и Object () являются двумя встроенными конструкторами в JavaScript. Хотя JavaScript не предоставляет классы, мы можем понимать массив и объект как концепция «классов».
Следует отметить, что «класс» JavaScript реализован конструктором.
Определите конструктор
Конструкторы также являются функциями, и нет никакой разницы в синтаксисе между определением конструкторов и другими функциями.
Единственное отличие состоит в том, что первая буква конструктора должна быть загладной измерения, что также является спецификацией программирования JavaScript.
Следующее определяет конструктор человека (), который мы можем понимать как класс человека.
function person () {console.log ('I Am Heapfool.');}«Класс» и конструктор JavaScript определены одновременно. При определении «класса» в JavaScript конструктор определяется одновременно.
Используя конструкторы
JavaScript использует классы так же, как C#, с новым ключевым словом, за которым следует конструктор.
var p = новый человек ();
Определить атрибуты и методы
Теперь, когда мы определили класс человека, мы можем добавить некоторые свойства и методы в класс человека.
Определите атрибуты
Говоря о объектах Javascript, мы говорим о настройке свойства и доступе объектов.
Этот код показывает два способа определения свойств объекта:
var cat = {color: 'black'}; cat.name = 'tom'; console.log (cat.color); console.log (cat.name);Используйте это, чтобы определить атрибуты
Метод определения атрибута класса JavaScript несколько отличается. Используйте это ключевое слово, чтобы определить атрибуты в конструкторе:
Функция Person (name) {this.name = name;}• Первая строка кода определяет класс человека и определяет конструктор.
• Вторая строка кода определяет атрибут имени.
Создать и использовать объекты
Следующие 2 строки кода создают объекты класса два человека
var p1 = новый человек ('Джеймс'); var p2 = новый человек ('cury');Вывод P1.name и P2.name в хромированной консоли
P1 и P2 являются двумя разными объектами, изменяя p1.name не повлияет на p2.name.
p1.name = 'Леброн Джеймс';
Определите метод
Во -первых, давайте отличаем термины «функция» и «метод». «Функция» является независимой единицей, в то время как «метод» зависит от существования класса в качестве субъекта.
Используйте это для определения методов
В JavaScript метод класса состоит в том, чтобы определить функцию в конструкторе и использовать это ключевое слово для определения метода в конструкторе:
Функция Person (name) {// определить атрибут this.name = name; // определить метод this.sayhello = function () {return 'hello, i am' + this.name;}}Как использовать
Вызовите метод SayHello () объектов P1 и P2 соответственно в хромированной консоли
Атрибут конструктора
Когда объект создается, специальное свойство автоматически назначается объекту JavaScript, и это свойство является свойством конструктора.
Введите p1.constructor в хромированную консоль, и вы можете увидеть, что свойство конструктора объекта P1 указывает на функцию.
Посмотрите на содержание этой функции, разве это не конструктор человека ()?
Это означает, что мы также можем создавать объекты через свойство P1.constructor,
var p3 = new p1.constructor ('steve nash');Эта строка кода объясняет предложение: «Мне все равно, как создан объект P1, но я хочу, чтобы другой объект был создан как P1!»
Используя экземпляр оператора в хромированной консоли, вы можете увидеть, что P1, P2 и P3 - все это экземпляры класса человека
Кроме того, когда мы создаем объект в способе {} , конструктор Object () фактически вызывается.
var O = {};Эта строка кода объявляет объект. Хотя мы не устанавливаем никаких свойств и методов, двигатель JavaScript устанавливает атрибут конструктора по умолчанию.
o.constructor указывает на конструктор Object (), [native code] показывает, что Object () является встроенной функцией в JavaScript.
Прототип объект
В JavaScript при определении функции функция будет иметь атрибут прототипа, а конструктор не является исключением.
На следующем рисунке показано, что свойство прототипа конструктора Person () является объектом, который принадлежит функции , и мы называем это свойство объектом прототипа.
С точки зрения личностного класса, мы также можем понять, что атрибут прототипа принадлежит классу человека.
В то же время, экземпляр Person Class не имеет атрибута прототипа. P1.Protototype на рисунке выше не определен, что означает, что атрибут прототипа используется, что немного похоже на статический атрибут в C#.
Установка прототипа
Поскольку прототип является объектом, вы можете добавить в него свойства и методы.
Определение свойств и методов на свойство прототипа функции ничем не отличается от настройки свойств и методов обычных объектов.
Следующий код определяет свойства и методы для человека. Прототип.
Функция (имя) {this.name = name; this.sayhello = function () {return 'hello, i am' + this.name;}} // Определить свойства и методы на прототипе конструктора. Человек («Джеймс»);Используя прототип
Свойства и методы прототипа, определяемые лично. Прототип может использоваться непосредственно при экземплярах класса человека и все еще используется в форме object.property .
Следует отметить, что name и sayHello() являются случаями, принадлежащими к классу человека, в то время как height и run() являются случаями, не принадлежащими к классу человека.
Советы: Вы можете проверить, содержит ли объект определенное свойство или метод с помощью метода HasownProperty.
Атрибуты прототипа
Экземпляр класса человека может использовать обе свойства лично и свойства лично. Прототип.
Итак, в чем разница между свойствами класса человека и свойствами человека. Прототип?
Во -первых, мы можем понимать свойства и методы в классе человека как «свойства экземпляра».
Поскольку прототип используется, мы можем понимать свойства и методы в прототипе как «общие свойства».
Разница между «атрибутами экземпляра» и «общими атрибутами» в основном отражается в производительности.
Каждый раз, когда будет создан экземпляр человека, будет сгенерирована копия атрибута имени и метода Sayhello (), а атрибут высоты и метод run () поделится копией всех экземпляров.
В этом случае это означает, что метод Sayhello () может быть упомянут в прототипе.
Кроме того, разные высоты экземпляра человека могут быть разными, поэтому должно быть более разумным поместить его в класс человека.
Функция человека (имя, высота) {this.name = name; this.height = height;} person.prototype.sayhello = function () {return 'hello, i am' + this.name + ', мой рост' + this.height + 'cm. новый человек («Джеймс», 203); var p2 = новый человек ('cury', 190);Класс Краткое изложение
JavaScript не имеет классов, но конструкторы могут реализовать «классы».
Согласно спецификациям программирования JavaScript, первая буква конструктора должна быть загладной измерения.
Свойства и методы «класса» определены в конструкторе в этом методе.
Когда создается создание объекта, JavaScript присваивает атрибут конструктора объекту. Атрибут конструктора является ссылкой на функцию конструктора объекта.
Функция уже имеет атрибут прототипа, когда он определен, а атрибут прототипа также является объектом.
Прототип используется, а свойства и методы, определенные на прототипе, могут использоваться в экземплярах «класса».
Если свойства или методы могут быть определены на прототипе, не определяйте их на конструкторах. Использование прототипа может уменьшить накладные расходы на память.
Приведенная выше статья о JavaScript OOP - детали реализации класса - это все контент, которым я поделился с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.