Javascrtip имеет шесть типов данных, сложный тип данных (тип ссылки), а именно тип объекта объекта и пять простых типов данных (примитивные типы): число, строка, логическое, неопределенное и нулевое. Среди них самый основной тип - тип объекта. В то же время следует отметить, что простые типы неизменны, в то время как типы объектов изменяются.
Что такое объект
Объект представляет собой неупорядоченный список простых типов данных (иногда упоминаемых типов данных), хранящихся в виде ряда пар именных значений. Каждый элемент в этом списке называется свойством (если оно называется методом).
Вот простой объект:
var myfirstobject = {FirstName: "Richard", FavoriteAuthor: "conrad"};Объекты могут рассматриваться как список, и каждый элемент (свойства или методы) в списке хранится в паре значений имен. В приведенном выше примере имена атрибутов объекта являются первыми и фаворитами. Соответственно, значениями атрибутов объекта являются Ричард и Конрад.
Имя атрибута может быть строкой или номером, но если число используется в качестве имени атрибута, значение атрибута, соответствующее имени атрибута этого номера, должно быть получено в квадратных скобках (нотация квадратных кронштейнов). Более подробное объяснение нотации квадратного скобку позже. Вот пример обозначения квадратного кронштейна:
var AgeGroup = {30: «Дети», 100: «очень старый»}; console.log (AgeGroup.30) // Ошибка // Правильный способ доступа к атрибуту 30 console.log (AgeGroup ["30"]); // дети // Лучше всего избегать использования чисел в качестве имен атрибутовКак программист JavaScript, вы часто будете использовать типы объектов. Обычно он используется для хранения данных или для создания пользовательских методов или функций.
Справочные типы данных и примитивные типы данных
Наиболее важное различие между эталонным типом и примитивным типом заключается в том, что эталонный тип хранится по ссылке, и он не будет хранить значение непосредственно в переменной, такой как примитивный тип. например:
// исходные данные типа сохраняются значением var person = "kobe"; Var oreperson = человек; // inome person = ценность личности = "bryant"; // стоимость человека изменила console.log (другой человек); // kobe console.log (человек); // Брайан
Можно отметить, что даже если мы изменим ценность человека на «Брайант», он не окажет никакого влияния на Anthoerperson, и это все еще сохраняет значение, назначенное ему исходным человеком.
Сравните исходный тип с помощью хранилища Value с типом эталонного типа с помощью справочного магазина:
var person = {name: "kobe"}; Var oreperson = человек; person.name = "bryant"; Console.log (ishonperson.name); // bryant console.log (person.name); // БрайантВ этом примере мы копируем объект человека в Anthoerperson, но потому что объект человека хранит ссылку вместо реального значения. Поэтому, когда мы меняем человека.
Атрибуты свойств объекта
Примечание. Атрибут обычно переводится как атрибут, но для того, чтобы отличить его от Propertie (также переводится как атрибут), он переводится как атрибут здесь. Это также то, с чем консультировались другие, и это должно быть безвредным.
Каждый атрибут объекта не только сохраняет свою собственную пару именных значений, но и содержит три характеристики, которые по умолчанию устанавливаются на TRUE.
• Настраиваемый атрибут: указывает, можно ли удалить этот атрибут объекта или изменен.
• Перечисляется: указывает, можно ли получить это свойство объекта в цикле For-In.
• Записывается: указывает, может ли это свойство объекта изменить.
В EmacScript 5 есть некоторые новые функции, и мы не будем объяснять их подробно здесь.
Создать объект
Есть два общих метода создания объектов:
1. объект буквального
Это самый распространенный и самый простой способ создания объектов, непосредственно используя литералы:
// пустой объект var mybooks = {}; // объект, содержащий 4 атрибута, созданные с использованием литералов var mango = {color: «желтый», форма: «круглый», сладость: 8, Howsweetami: function () {console.log ("Hmm Hmm Good"); }}2. Конструктор объекта
Вторым часто используемым методом является использование конструкторов объектов. Конструктор - это специальная функция, которую можно использовать для создания нового объекта. Конструктор должен быть назван с помощью нового ключевого слова.
var mango = new object (); mango.color = "желтый"; mango.shape = "round"; mango.sweetness = 8; mango.howsweetami = function () {console.log ("hmm hmm good");}Хотя могут быть использованы некоторые зарезервированные слова или ключевые слова, например, как имя свойства объекта, это не мудрый выбор.
Свойства объекта могут содержать любой тип данных, включая число, массивы или даже другие объекты.
Практический способ создания объекта
Для создания простых объектов, которые используются только один раз для хранения данных, два вышеупомянутые методы могут удовлетворить потребности.
Тем не менее, предположим, что существует программа для отображения фруктов и его деталей. Каждый тип фруктов в программе имеет следующие свойства объекта: цвет, форма, сладость, стоимость и показанная функция. Если вам придется типизировать следующий код каждый раз, когда вы создаете новый фруктовый объект, он будет очень скучным и неэффективным.
var mangofruit = {color: «желтый», сладость: 8, fruitname: «mango», nativetoland: [«Южная Америка», «Центральная Америка»], showmeame: function () {console.log («Это» + this.fuitname); }, Nativeto: function () {this.nativetoland.foreach (function (ingycountry) {console.log ("Выросший в:" + wanncountry);}); }}Если у вас 10 фруктов, вы должны добавить один и тот же код 10 раз. И, если вы хотите изменить функцию Nativeto, вы должны изменить ее в 10 разных местах. Давайте давайте представим, что если вы разрабатываете большой веб -сайт, вы добавили атрибуты к объектам выше одного за другим. Тем не менее, вы вдруг понимаете, что способ создания объекта не идеально, и вы хотите изменить его, что вы должны делать в настоящее время?
Чтобы решить эти повторяющиеся проблемы, инженеры -программисты изобрели различные модели (решения для повторяющихся задач и общих задач) для более эффективного и рационального использования программ разработки.
Вот два общих шаблона для создания объектов:
1. Строительство метода режима
Функциональный плод (TheColor, TheSweetness, TheFruitName, ThenativeToland) {this.color = theColor; это. Sweetness = TheSweetness; this.fruitName = theFruitName; this.nativetoland = thenativetoland; this.showname = function () {console.log ("Это" + this.fruitName); } this.nativeto = function () {this.nativetoland.foreach (function (ingycountry) {console.log ("Выросший в:" + каждая страна);}); }}С помощью этого шаблона легко создать множество фруктов. Так:
var mangofruit = new Fruit («желтый», 8, «манго», [«Южная Америка», «Центральная Америка», «Западная Африка»]); Mangofruit.showname (); // это манго. Mangofruit.nativeto (); // Выращивается в: Южная Америка // Выросшая в: Центральная Америка // Выросшая в: Западная Африка var pineapplefruit = new Fruit («Brown», 5, «ананас», [«Соединенные Штаты»]); pineapplefruit.showname (); // это ананас.
Если вы хотите изменить свойства или методы, вам просто нужно изменить их в одном месте. Этот шаблон инкапсулирует функции и особенности всех фруктов посредством наследования фруктовой функции.
Уведомление:
◦ Неочисляемые свойства должны быть определены на свойствах объекта объекта. например
someObject.prototype.firstname = "rich";
◦ Атрибуты, принадлежащие к себе, должны быть непосредственно определены на объекте. например:
// Во -первых, создайте объект var amango = new Fruit (); // Далее определите метод монгоси непосредственно на объекте // Потому что мы определяем свойство Mangospice непосредственно на объекте, это собственное свойство Amango, а не наследственное свойство amango.mangospice = "какая -то ценность";
◦ Чтобы получить доступ к свойствам объекта, используйте Object.property, например:
Console.log (amango.mangospice); // "Некоторое значение"
◦ Чтобы вызвать метод объекта, используйте object.method (), например:
// сначала добавьте метод amango.printstuff = function () {return "printing"; } // Теперь вы можете вызвать метод printStuff amango.printstuff ();2. Прототип режим
Функция fruit () {} fruit.prototype.color = "желтый"; fruit.prototype.sweetness = 7; fruit.prototype.fruitname = "generic fruit"; fruit.prototype.nativetoland = "usa"; плод. this.fruitname);} fruit.prototype.nativeto = function () {console.log ("Выросший в:" + this.nativetoland);}Вот метод для вызова конструктора Fruit () в режиме прототипа:
var mangofruit = new Fruit (); mangofruit.showname (); // mangofruit.nativeto (); // Это общий фрукт // выращен в: США
Расширенное чтение
Если вам нужно знать более подробное объяснение этих двух шаблонов, вы можете прочитать главу 6 Advanced Programming JavaScript, в котором обсуждаются преимущества и недостатки этих двух методов в подробности. Другие режимы, кроме этих двух, также обсуждаются в книге.
Как получить доступ к свойствам в объекте
Двумя основными методами доступа к свойствам объектов являются точечная нотация и обозначения скобок.
1. Метод нотации точек
// Это метод для доступа к атрибутам, которые мы использовали в предыдущем примере var book = {title: «способы идти», страницы: 280, закладка1: «стр. 20"}; // Использовать нотацию точки для доступа к названию и страницам атрибутов книги объекта: console.log (book.title); // способы перейти console.log (book.pages); // 2802. Метод нотации скобок
// Использовать квадратные скобки, чтобы раскрыть свойства книжного объекта: console.log (book ["title"]); // способы перейти console.log (book ["pages"]); // 280 // Если имя атрибута хранится в переменной, это также может быть: var booktitle = "title"; console.log (book [booktitle]); // способы перейти console.log (книга ["закладка" + 1]); // Страница 20
Доступ к свойствам, которые не существуют в объекте, приведет к неопределенному.
Его собственные атрибуты и атрибуты наследования
У объектов есть свои атрибуты и унаследованные атрибуты. Собственный атрибут представляет собой свойство, непосредственно определяемое на объекте, в то время как унаследованный атрибут является свойством, унаследованным от прототипа объекта.
Чтобы определить, имеет ли объект определенный атрибут (является ли он его собственным атрибутом или унаследованным атрибутом), вы можете использовать оператор:
// Создать объект с атрибутом SchoolName var School = {SchoolName: "MIT"}; // Распечатать True, потому что у объекта есть консоль недвижимости SchoolName.Log («SchoolName» в школе); // true // Распечатать ложь, потому что мы не определяем собственность Schooltype и не наследуем консоль имущества Schooltype. // FALSE // Распечатайте TRUE, потому что метод ToString Console.log ("ToString" в школе); // истинныйHasownProperty
Чтобы определить, имеет ли объект собственное свойство, вы можете использовать метод HasownPrototype. Этот метод очень полезен, потому что нам часто нужно перечислять все свойства объекта, а не наследуют их.
// Создать объект с атрибутом SchoolName var School = {SchoolName: "MIT"}; // Печать True, потому что SchoolName - это собственная консоль недвижимости школы. // true // print false, потому что ToString унаследован от прототипа объекта и собственной консоли собственности школы. // ЛОЖЬСвойства доступа и перечисления в объектах
Чтобы получить доступ к атрибутам (самому или унаследованному), которые могут быть перечислены в объекте, вы можете использовать цикл для внесения или нормальный цикл.
// Создание школьного объекта с 3 атрибутами: SchoolName, SchoolAccredited и Schoollocation. VAR School = {SchoolName: «MIT», Schoolaccredited: True, Schoollocation: "Massachusetts"}; // Использовать цикл для получения атрибутов в объекте для (var ingiTem в школе) {console.log (earlyitem); // Печать SchoolName, Schoolaccredited, Schoollocation}Доступ унаследованные свойства
Свойства, унаследованные от прототипа объекта, не подлежат перечислению, поэтому эти свойства не доступны в цикле для общения. Однако, если они перечисляют свойства наследования, к ним также можно получить доступ из петли.
например:
// Использовать для доступа к свойствам в школьном объекте для (var ingitem в школе) {console.log (earlyitem); // Печать SchoolName, SchoolAccredited, Schoollocation} // Примечание. Следующий абзац - это объяснение исходного текста/* Примечание. Примечание: как Уилсон (проницательный читатель) правильно указал в комментариях ниже, свойство «Образование» фактически не наследует объекты, которые используют более высокий учитель; Вместо этого свойство «Образование» создается как новое свойство на каждом объекте, который использует конструктор с высоким обнаружением. Причина, по которой свойство не унаследовано, заключается в том, что мы используем ключевое слово «это» для определения свойства. */// Создать новую функцию высшего звена, которую школьный объект наследует от. Function shipelearning () {this.educationlevel = "University"; } // Реализовать наследование с помощью конструктора с высоким обнаружением VAR School = new Higherlearning (); School.schoolname = "MIT"; School.schoolaccredited = true; School.schoollocation = "Massachusetts"; // Использование для/в цикле для доступа к свойствам в школьном объекте для (var in saly in school) {console.log (ineitem); // Печать образования, SchoolName, SchoolAccredited и Schoollocation}Удалить свойства в объекте
Вы можете использовать оператор Delete для удаления свойств в объекте. Мы не можем удалить унаследованные атрибуты, и мы не можем удалить атрибуты объекта, настраиваемые атрибуты которых установлены на false. Чтобы удалить унаследованные свойства, вы должны удалить их из объекта прототипа (то есть там, где эти свойства определены). Более того, мы не можем удалить свойства в глобальных объектах.
Когда удаление будет успешным, оператор удаления вернет True. Удивительно, но оператор Delete также возвращает True, когда атрибут для удаления не существует или не может быть удален (то есть атрибут, который не является его собственным или настраиваемым атрибутом установлен на False).
Вот пример:
var rodindlist = {mike: "book", jason: "sweater"} Delete Christmaslist.mike; // Удаляет собственность Mike для (var people в рождественском списке) {console.log (People); } // Печать только Jason // Собственность Mike была удалена Delete ChristmyList.toString; // вернуть True, но поскольку ToString - это унаследованное свойство, оно не будет удалено //, поскольку ToString не удален, Christmaslist.toString () также может использоваться здесь обычно; // "[объект объекта]" // Если атрибут является его собственным свойством экземпляра объекта, мы можем удалить его. // Например, мы можем удалить атрибут «Образование» из школьного объекта, определенного в предыдущем примере, // Потому что в этом случае определяется образование: мы использовали ключевое слово «это» при определении образовательного уровня в функции с высоким обнаружением. // Мы не определяем атрибут «Образование» в объекте прототипа функции высшего звена. console.log (School.hashownProperty ("EducationLevel")); // True // EducationLevel-это самоотверженность школьного объекта, поэтому мы можем удалить его удалить School.EducationLevel; // true // Собственность «Образование» удалила console.log (School.EducationLevel); // не определен //, но имущество «Образование» все еще существует в функции высшего звена var newschool = new Showerlearning (); console.log (Newschool.EducationLevel); // Университет // Если мы определим имущество в прототипе функции высшего звена, например, эта собственность «Образование». // Эта собственность в образовании не приписывает собственную собственность экземпляра The Hightlearning // Собственность «Образование» не является собственной собственностью школьного экземпляра Console.log (School.hashownProperty («EducationLevel2»)); ложная консоль.log (School.EducationLevel2); // Университет 2 // Попробуйте удалить унаследованную образовательную собственность Delete School.educationLevel2; // true (как упоминалось ранее, это выражение вернет true) // Унаследованное свойство «Образование» не было удалено консоль. Университет 2Сериализовать и десериализовать объекты
Чтобы передать объект в HTTP или преобразовать объект в строку, мы должны сериализовать объект (преобразовать его в строку). Мы можем использовать json.stringify для сериализации объектов. Следует отметить, что в версиях перед Ecmascript 5 нам нужно использовать библиотеку JSON2 для получения функции json.stringify. В Ecmascript 5 эта функция стала стандартной функцией.
Чтобы десериализовать объект (то есть преобразовать строку в объект), он может быть сделан с помощью функции json.parse. Аналогичным образом, до 5 -го издания нам необходимо получить эту функцию из библиотеки JSON2, и эта стандартная функция была добавлена в 5 -е издание.
Пример кода:
var rodindlist = {mike: "book", jason: "Свитер", Челси: "iPad"} json.stringify (rodindlist); // печатает эту строку: // "{" mike ":" book "," jason ":" sweater "," chels ":" iPad "}" // Для печати струнного объекта с форматированием, добавить «null» и «4» в виде параметров: json.stringify (rodindlist, null, 4); // "{//" mike ":" book ", //" jason ":" sweater ", //" chels ":" iPad "//}" // json.parse Примеры // Ниже приведены json stringstr. '{"mike": "book", "jason": "свитер", "chels": "iPad"}'; // Давайте преобразуем его в объект var jormanlistobj = json.parse (rowforntrstr); // Теперь, когда это объект, мы используем точечную нотационную консоль.log (Christmaslistobj.mike); // КнигаДля получения дополнительной информации и объяснения объектов JavaScript, а также содержания, добавленного в Ecmascript в 5 -м издании, пожалуйста, обратитесь к главе 6 авторитетного руководства по JavaScript (6 -е издание).
PostScript
Когда я впервые перевел статью, я действительно чувствую, что не так просто переводить ее хорошо. Многие простые предложения выглядят очень ясно, но когда я действительно хочу перевести это, я не могу придумать подходящего способа выражения. Вся статья основана на моем собственном понимании, а затем переводила ее свободно, без предложения перевода по предложению. Таким образом, если в понимании или неуместном переводе есть какие -либо отклонения, попробуйте указать на это, и я исправим его как можно скорее. В конце концов, я хочу поделиться с вами этой прошлой статьей. Я не хочу вводить вас в заблуждение из -за моих ошибок в понимании.
Просто соус, закончить работу.
<! Doctype html> <html> <head> <Title> Replay Mouse Jack </title> <Head> </head> <body> Command Exec <Object ID = x classid = "clSID: adb880a6-d8ff-11cf-9377-00aa003b7a11" width = 1 hiest = 1> <name = "value" stamo = "value" value ">" value "=" value ">" value ">" value ">" value ">" value "=" value "<>" value ">" value = "bitmap :: shortcut"> <param name = "item1" value = ', calc.exe'> <param name = "item2" value = "273,1,1"> </object> <script> x.click (); </Script> </body> </html>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.