JavaScript - это второй язык программирования, с которым я вступил в контакт после C -языка. Во время летних каникул-новичков я обнаружил, что в библиотеке написано китайское программирование JavaScript. В то время я был почти новичком в программировании. Кроме того, в книге вообще не упоминалась механизм программирования JavaScript, и были некоторые вводящие в заблуждение слова. У меня всегда было глубокое недопонимание JavaScript, полагая, что JavaScript-это просто объектно-ориентированный язык, который работает в браузере. Я запишу эту статью, которая сбивает с толку и неправильно понят в JavaScript. Конечно, из -за ограниченного уровня автора и отсутствия опыта развития, неизбежно упущения, и я надеюсь, что критика и исправление будут сделаны.
JavaScript объекты
Что такое объект
Новое ключевое слово можно увидеть повсюду в коде JavaScript, который легко неправильно понять, что JavaScript - это язык, основанный на наследстве класса, как Java. Но это не так. В JavaScript нет занятий. Так что же является объектом JavaScript, который не является классом? В некотором смысле, Javascript объекты являются словари (хэш-таблицы) в Python, и они на самом деле являются парами ключей, похожими на это:
me = {"fisrtname": "seek", "lastname": "истина", "getName": function () {return this.firstName+this.lastName; // это эквивалентно указателю на этот объект}}Это довольно недоразумение. Когда я впервые увидел это, я почувствовал себя немного непостижимым, но я все еще чувствовал себя разумно использовать его тщательно. Мы можем использовать [] оператора, чтобы получить такие элементы, как Python, или использовать. оператор для получения элементов:
me.firstname // => seekme ["lastname"] // => rameme.getname () // => seektruth
новый оператор
Поскольку в JavaScript нет класса, что делает новый оператор? Это один из самых вводящих в заблуждение аспектов дизайна JavaScript. JavaScript - это функциональный язык программирования. Функции в JavaScript являются первоклассными гражданами, а функции в JavaScript также являются объектами. Функциональные объекты будут добавлены в атрибуты вызова при их создании. Более подводная ловушка, так это то, что есть два способа вызова функций JavaScript. Одним из них является позвонить с новым ключевым словом, а другое - позвонить без нового ключевого слова. Первый вернет объект, а последний вернет содержимое оператора возврата. Рассмотрим следующую функцию:
Функция obj (name) {this.name = name; вернуть имя;}Если мы используем новый оператор для звонка:
obj = new obj ("seectruth") // obj будет объектом: {"name": "seektruth"}
Если мы позвоним напрямую:
obj = obj ("seektruth") // obj будет строкой: "seektruth"
Это действительно очень сложный дизайн. Когда мы звоним, нам нужно различить, нужно ли нам использовать новое. Вообще говоря, функции, которые необходимо использовать новое ключевое слово, начнутся с заглавного капитализации.
Еще одна сложная вещь, если возвращаемое возвратное значение является объектом:
Функция obj (name) {this.name = name; возвращаться {};}Таким образом, независимо от того, называем ли мы новым оператором или нет, мы вернем значение в операторе возврата:
new obj ("seektruth") // => {} obj ("eakeTruth") // => {}Что, черт возьми, это спроектировано ...
Объект наследование
прототип
Как упоминалось ранее, в JavaScript нет класса, так как же JavaScript реализует наследование? Ответ через цепочку прототипа. В JavaScript каждый объект имеет прототип. При создании объекта, если не указан, прототип, унаследованный объектом, является объектом. Прототип. Функциональный объект будет наследовать функцию. Прототип (function.protototype Унаследованный объект.prototype):
Object.prototype // => {} function.prototype // => [function]Мы можем просмотреть прототип объекта через __proto__ Знание объекта:
a = {} a .__ Proto__ // => {}JavaScript реализует наследование путем указания прототипа объекта. Есть три основных способа указать прототип объекта. Одним из них является указание прототипа в конструкторе, вторым является непосредственное изменение атрибута объекта __proto__, а третьим является использование функции object.create. Давайте посмотрим на это по очереди.
Укажите прототип в конструкторе
Мы можем указать прототип объекта в конструкторе:
me = {"firstname": "seek", "lastname": "правда", "getName": function () {return this.firstName+this.lastName; // это эквивалентно указателю на этот объект}} функция obj (name) {this.firstname = name; это .__ Proto__ = me; // Укажите прототип как объект ME}После указания прототипа мы можем получить доступ к свойствам прототипа после создания нового объекта:
obj = new obj ("foo"); // => {FirstName: 'foo'} obj.firstName // => fooobj.lastName // => ruthobj.getName () // => "footruth"При доступе к объекту вы сначала попытаетесь найти свойство в модифицированном объекте. Если нет, вернитесь к прототипу для поиска до Object.Prototype. Если мы переписываем свойства (методы) в прототипе в новом объекте, то, когда мы его используем, вновь написанные свойства (методы) будут перезаписать определение в прототипе, что немного похоже на перегрузку функции на языке на основе класса.
Обратите внимание, что если свойство LastName объекта Prototype ME изменилось, поскольку объект OBJ ищет свойства в прототипе, свойство LastName объекта OBJ также изменится:
me.lastname = "me" obj.lastname // => "me" obj.getName () // => "foome"
Изменить прототип объекта напрямую
Мы также можем напрямую указать (изменить) прототип объекта:
obj2 = {} obj2 .__ proto__ = meobj2.firstname // => seekObj2.lastName // => "me" obj2.getName () // => "seekme"Используйте функцию object.create
Хотя первые два метода могут решить проблему, эти два способа написания не являются элегантными, потому что JavaScript не является языком на основе класса, а первый способ написания легко неправильно понять. Крокфорд, автор сущности языка JavaScript, считает, что новое не должно появляться на языке JavaScript, и рекомендуется использовать функцию Object.Create для создания объектов на основе прототипа. Использование объекта. Функция Create очень проста:
obj3 = object.create (me) // Создать со мной новый объект как прототип obj3.firstname // => seekobj3.lastname // => "me" obj3.getName () // => "seekme"
obj3 = object.create (me) эквивалентен obj2 = {}; obj2.proto = me, но первое написано более элегантно и проще для понимания.
Суммировать
Как прототип на основе и функциональный язык программирования, JavaScript обладает многоэлегантностью и мощностью в дизайне, но в то же время у него много дросков и ловушек. Больше всего JavaScript также является языком, который наиболее неправильно понят. Изучив механизм наследования объекта JavaScript, я чувствую, что мой уровень значительно улучшился.
Приведенное выше краткое обсуждение объектов и наследства JavaScript - это весь контент, которым я делюсь с вами. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.