English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Часть объекта
Тип Object
Object является неупорядоченной коллекцией, которая может хранить объекты любого типа, все другие объекты наследуются от этого объекта.
Создание типа Object возможно двумя способами: с помощью оператора new и с помощью литерала.
1. Создание Object с помощью оператора new
var obj = new Object(); // внимание на прописные буквы, можно также написать Object()
Внимание, создание нового объекта с помощью new Object() эквивалентно записи obj = {}.
2. Создание с помощью литерала:
var obj = { имя : 'trigkit4', возраст : 21 }; // запятая лучше добавить
При создании объекта с помощью литерала не вызывается конструктор Object() (кроме FF)
Объект Object.prototype
У всех конструкторов есть свойство prototype, которое указывает на прототипный объект.
Object.prototype.print = function(){ console.log(this)}; var obj = new Object(); obj.print() // Object
Пример obj напрямую наследует свойства и методы Object.prototype
1. Объект это всего лишь особый тип данных. Объект обладает свойствами и методами. JavaScript это объектно-ориентированный язык, но JavaScript не использует классы. JavaScript основан на [prototype][1], а не на классах.
2. Свойства: это переменные, принадлежащие определенному объекту. Методы: это функции, которые могут вызываться только определенным объектом.
3. JS объекты это набор свойств и методов. Метод это функция, которая является членом объекта. Свойство это значение или набор значений (в виде массива или объекта), которое является членом объекта.
4. JS объекты основаны на конструкторских функциях, создание нового объекта с помощью конструкторской функции можно назвать инсталляцией нового объекта. Свойства это переменные внутри конструкторской функции.
Использование конструктора функции для создания объекта:
cat = new Animal();
Javascript это объектно-ориентированный язык (object-based), все, что вы встречаете, почти всегда объект. Но это не真正的面向对象的 программирование (OOP), так как в его синтаксисе нет класса (class).
<script type="text/javascript"> // Объект это набор имен/значений var browser = { // Объект заключен в фигурные скобки name: "Firefox", kernel: "Gecko" }; </script> // Доступ к свойствам объекта через точку (.) или "[]" browser.name // "Firefox" browser["kernel"] // "Gecko"
Объект (objct) это набор свойств (property), каждое свойство состоит из “имя/значение”, JS также определяет особый объект — массив, это упорядоченная коллекция значений с индексами.
JS также определяет особый объект — функцию, функция это объект, обладающий связанным с ним executable кодом, который можно вызвать для выполнения кода и получения результата вычисления.
В JavaScript нет классов, но он использует новый термин “объект прототипа”, поэтому “класс == объект прототипа”, подробности см. в: Как пишутся классы JavaScript (часть 1)
Вторая часть: различия и связи между классом (прототипом объекта) и объектом (экземпляром)
1. Класс (прототип объекта) абстрактен, концептуален,代表着一类事物.
2. Объект конкретен, реален,代表着 конкретное существо.
3. Класс (прототип объекта) является шаблоном для объектов-экземпляров, объект-экземпляр является индивидуальным примером класса.
Частая ошибка - это то, что числовые litterals не являются объектами. Это связано с ошибкой парсера JavaScript, который пытается интерпретировать точку как часть числа.
Есть много способов сделать числовые litterals похожими на объекты.
2..toString(); // Вторая точка может быть нормально распознана
2 .toString(); // Обратите внимание на пробел перед точкой
(2).toString(); // 2 сначала вычисляется
Удаление атрибута
Единственный способ удалить атрибут - использовать оператор delete; установку атрибута в undefined или null не удаляет атрибут, а только удаляет связь между атрибутом и значением.
Три основных черты面向对象的 JavaScript
Обертка: не учитывает внутреннее выполнение, а только функциональное использование
Инheritance: создание новых объектов на основе существующих объектов
Многообразие: под многообразием понимается множество состояний одного и того же объекта в различных ситуациях:
1. Обертка
Обертка заключается в том, чтобы собрать共性的事物(включая свойства и поведение)в один класс, чтобы было удобно использовать. Например, человека можно封装如下:
Человек {
Возраст (свойство один)
Рост (свойство два)
Пол (свойство три)
Делать (поведение之一)
Ходить (поведение之二)
Говорить (поведение之三)
}
Преимущества обертки:
Обертка защищает целостность внутренних данных;
Обертка упрощает重构 объектов;
Ослабляет耦合 между модулями, повышая повторное использование объектов;
Это помогает избежать конфликта именованных пространств;
Смотрите следующий пример:
<script type="text/javascript"> var boy = {}; // Создание пустого объекта boy.name = " Xiao Ming"; // По свойствам прототипа объекта boy.age = 12; var girl = {}; girl.name = " Xiao Hong"; girl.age = 10; </script>
Это самая простая форма обертки, когда две свойства обернуты в один объект. Однако, у этого способа есть два недостатка: во-первых, если нужно создать несколько экземпляров, это становится очень сложным; во-вторых, между экземплярами и прототипом нет никакого способа определить их связь.
Шаблон конструктора
Для решения проблемы генерации экземпляров из прототипа объектного объекта JavaScript предоставляет шаблон конструктора (Constructor).
Так называемая "функция-конструктор" на самом деле является обычной функцией, но внутри она использует переменную this. Использование оператора new с функцией-конструктором позволяет создавать экземпляры, и переменная this будет привязана к объекту экземпляра.
Например, прототипные объекты boy и girl можно записать так:
<script type="text/javascript"> function Person(name, age) { this.name = name; this.age = age; } </script>
Теперь мы можем создавать экземпляры объектов.
<script type="text/javascript"> var boy = new Person(" Xiao Ming ", 12); var girl = new Person(" Xiao Hong ", 10); alert(boy.name); // Xiao Ming alert(boy.age); //12 </script>
В этот момент boy и girl автоматически будут содержать атрибут constructor, указывающий на их функцию-конструктор.
alert(boy.constructor == Person); //true
alert(girl.constructor); //выводит целую строку функции-конструктора, попробуйте сами
Модель Prototype в Javascript определяет, что каждая функция-конструктор имеет прототипный атрибут, который указывает на другой объект. Все атрибуты и методы этого объекта будут наследоваться экземплярами функции-конструктора.
Это означает, что мы можем напрямую определять те атрибуты и методы, которые не изменяются, в объекте prototype.
<script type="text/javascript"> function Person(name, age) { this.name = name; this.age = age; } Person.protype.type = " человек "; Person.protype.eat = function() { alert(" есть рис "); } </script>
Затем, создайте экземпляры:
<script type="text/javascript"> var boy = new Person(" Xiao Ming ", "12 "); var girl = new Person(" Xiao Hong ", "10 "); alert(boy.type); //человек boy.eat(); //есть </script>
В этот момент типовые атрибуты и метод eat() всех экземпляров на самом деле являются одним и тем же адресом памяти, указывающим на объект prototype, что повышает эффективность выполнения.
alert(boy.eat == girl.eat); //true
Прототипный атрибут является встроенным атрибутом, который определяет функцию-конструктор, к которой расширяется объект.
Ниже приведен код, который добавляет новую атрибут size к функции-конструктору Animal, этот новый атрибут является прототипным атрибутом объекта cat. Через прототипные атрибуты, все объекты, расширяющие функцию-конструктор Animal, могут получить доступ к атрибуту size
cat = new Animal("feline","meow", "walk/run"); cat.prototype.size = "fat";
В этом случае, все свойства size объектов Animal будут "fat". Прототип по умолчанию является новым экземпляром Object, так как это все еще объект, к нему можно добавить новые свойства. Например, как и объект style в javascript, к style можно добавить новые свойства.
<script type="text/javascript"> /*Определение класса Person*/ function Person(_name,_age,_salary){ //Публичные свойства класса Person, способ определения публичных свойств класса: "this.имяСвойства" this.Name=_name; //Частные свойства класса Person, способ определения частных свойств класса: "var имяСвойства" var Age=_age; var Salary=_salary; //Определение публичного метода класса Person (специфический метод), способ определения публичных методов класса Это: "this.functionName=function(){.....}" this.Show=function(){ alert("Age="+Age+"\t"+"Salary="+Salary);//Доступ к частным свойствам класса в открытом методе разрешен } </script>
Когда объект ищет определенное свойство, он сначала проверяет свои собственные свойства, если их нет, то продолжает искать объект, на который ссылается [[Prototype]], если и там нет, то продолжает искать [[Prototype]].[[Prototype]], и так далее, до тех пор, пока [[Prototype]].….[[Prototype]] не будет undefined ([[Prototype]] объекта Object именно undefined)
Простыми словами, это сохранение ссылки на другой объект через [[Prototype]] и поиск свойств через эту ссылку, что и есть原型цепочка.
Объект null
Цель присвоения null переменной в js:
Присвоение пустой строки легко понять, что переменная предназначена для хранения объекта. Это также упрощает отладку
Глобальный объект window
Любая глобальная функция или переменная в JavaScript является свойством window.
Объект self полностью идентичен объекту window, обычно self используется для подтверждения того, что это текущий окно.
Основные объекты окна mainly следующие несколько:
Объект document JavaScript
Объект frames JavaScript
Объект history JavaScript
Объект location JavaScript
Объект navigator JavaScript
Объект screen JavaScript
Несколько常用ных методов
Метод valueof(): возвращает исходное значение объекта
Метод split() используется для разделения строки на массив строк и возвращения этого массива.
Метод indexOf() может возвращать положение первого的出现 указанного значения в строке.
Метод substring() используется для извлечения символов из строки между двумя указанными индексами.
Метод substr() используется для извлечения строки из строки, начинающейся с позиции startPos и продолжающейся указанным количеством символов.
Метод join() используется для помещения всех элементов массива в одну строку.
arrayObject.join(разделитель)
Метод reverse() используется для изменения порядка элементов массива.
Метод slice() может возвращать выбранные элементы из существующего массива.
Лицо объекта
Лицо объекта используется для создания процессов, содержащих множество свойств, как показано ниже:
<script type="text/javascript"> var company = { name: "Microsoft", ages: 39, employees: 99000, CEO: "Nadella" }; </script>
Здесь следует отметить, что атрибуты и значения атрибутов отделяются точкой с запятой (:); несколько атрибутов отделяются запятыми (,). Лицо объекта также может определять методы, достаточно написать function на атрибуте объекта, это анонимная функция, чтобы вызвать её, достаточно написать имя метода().
<script type="text/javascript"> var dog = { name:"husky", age:2, run:function(){ return "123"; } } alert(dog.run()); Если ввести dog.run, то появится код части функции за ним </script>
Базовые типы значений 包装ер
JS имеет пять основных типов значений: number, string, Boolean, null и undefined. За исключением null и undefined, остальные три имеют так называемые базовые объекты 包装器. 包装对象 можно создать с помощью встроенных конструкторов Number(), String() и Boolean().
var num = new Number(10); console.log(typeof num); // object Метод Object() Object() // возвращает пустой объект Object(undefined) // возвращает пустой объект Object(null) // возвращает пустой объект Object(1) // эквивалентно new Number(1) Object('foo') // эквивалентно new String('foo') Object(true) // эквивалентно new Boolean(true) Object([]) // возвращает исходный массив Object({}) // возвращает исходный объект Object(function() {}) // возвращает исходную функцию
Часть массива
1. Объект Array
Объект Array: предоставляет поддержку для создания массивов любого типа данных.
arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])
Определение: var arr = [2,3,45,6]; var arr = new Array(2,4,5,7)
У них нет различий в определении, [] имеет более высокую производительность, так как код короче.
Использование массивов и объектов литерала: var aTest = []; Создание массива с использованием литерала массива - это guter выбор; таким же образом, литерал объекта также может использоваться для экономии места. Два следующих строки равны, но использование литерала объекта более кратко:
var oTest = new Object; // старательно не использовать var oTest = {}; // лучшее решение, или var oTest = [];
Для достижения оптимальной производительности при итерации по массиву рекомендуется использовать классический цикл for.
var list = [1, 2, 3, 4, 5, ... до 100000000]; for(var i = 0, l = list.length; i < l; i++) { console.log(list[i]); }
В приведенном выше коде есть обработка, которая заключается в кэшировании длины массива через l = list.length.
Конструктор Array
Из-за неопределенности в обработке параметров конструктором Array всегда рекомендуется использовать литерал массива - [] - для создания массивов.
Следовательно,下面的 код может быть очень запутанным:
new Array(3, 4, 5); // Результат: [3, 4, 5]
new Array(3) // Результат: [], длина этого массива составляет 3
Следует избегать использования конструктора массива для создания новых массивов. Рекомендуется использовать литерал массива. Они более короткие и ясные, что увеличивает читаемость кода.
Свойства массива Array
3 свойств массива Array: свойство Length, свойство prototype, свойство constructor
1. Свойство Length
Свойство Length показывает длину массива, то есть количество элементов в нем. Поскольку индексы массива всегда начинаются с 0, поэтому верхние и нижние пределы массива分别是: 0 и length-1. В отличие от многих других языков, свойство length массива JavaScript является изменяемым, это следует учитывать.
2. Свойство prototype
Возвращает ссылку на прототип объекта. Свойство prototype является общим для объекта.
Для объекта массива Array рассмотрим использование свойства prototype на следующем примере.
Добавить метод в объект массива, который возвращает максимальное значение элемента массива. Для этого объявите функцию, добавьте ее в Array.prototype и используйте ее.
function array_max() { var i,max=this[0]; for(i=1;i<this.length;i++) { if(max<this[i]) max=this[i]; } return max; } Array.prototype.max=array_max; var x=new Array(1,2,3,4,5,6); var y=x.max();
После выполнения этого кода переменная y сохраняет максимальное значение массива x, или 6.
3. Свойство constructor
Функция создания объектов. Объяснение: свойство constructor является членом всех объектов, обладающих прототипом. Это включает все вbuilt-объекты JScript, за исключением объектов Global и Math. Свойство constructor хранит ссылку на функцию, которая создает экземпляр конкретного объекта.
Например:
x = new String("Hi"); if(x.constructor==String) //обработка (условие истины). //или function MyFunc{ //тело функции. } y=new MyFunc;
if(y.constructor==MyFunc) //обработка (условие истины).
Для массива:
y = new Array();
Метод объекта Array
Метод sort()
Синтаксис
arrayObject.sort(sortby)
sortby опционально. Определяет порядок сортировки. Это должна быть функция.
var arr = [11,2,28,4,5,1];
console.log(arr.sort()); //return [1, 11, 2, 28, 4, 5]
Почему здесь 11 и 28 не выложены в порядке? Потому что сортировка без параметров sort выполняется по порядку кодировки символов.
Тогда, если нужно отсортировать элементы массива по возрастанию, посмотрите на следующий код:
var arr = [11,2,28,4,5,1]; console.log(arr.sort(function(a,b){ return a-b; //return [1, 2, 4, 5, 11, 28] });
Если нужно сортировать по другим критериям, нужно предоставить функцию сравнения, которая сравнивает два значения и возвращает цифру, показывающую их относительный порядок. Функция сравнения должна иметь два параметра a и b, и её значение должно быть следующим:
Если a меньше b, в отсортированном массиве a должен出现在 b до него, то возвращает значение меньше 0.
Если a равно b, то возвращает 0.
Если a больше b, то возвращает значение больше 0.
Это конец статьи. Надеюсь, она поможет вам в изучении, и希望大家 будут активно поддерживать tutorial呐喊.