JavaScript Классы, конструкторы и прототипы • • • • Функция-конструктор Прототипы Свойства класса Object Методы класса Object Функция-конструктор Любая функция, кроме некоторых встроенных, может создать объект. Для этого ее нужно вызвать через директиву new <script type="text/javascript"> // Создаём функцию-конструктор для объекта «AddCar» function AddCar(model, coast) { this['model'] = model; this['coast'] = coast; } // Вызываем функцию-конструктор, присваивая полученный объект переменной «car» var car = new AddCar('BMW', '150000'); window.document.write(car['model']+' '+car['coast']); /* Аналог 1 var car = new Object(); car['model'] = 'BMW'; car['coast'] = '150000'; */ /* Аналог 2 var car = {'model':'BMW', 'coast':'150000'} */ </script> Функция-конструктор Для проверки принадлежности к классу существует оператор instanceof <script type="text/javascript"> function AddCar(model, coast) { this['model'] = model; this['coast'] = coast; } var car = new AddCar('BMW', '150000'); alert(car instanceof AddCar); //Выведет «true» </script> Свойства класса Object Свойство «prototype» В JavaScript используется уникальная форма создания объектов и наследования, которая называется прототипным наследованием. Суть этого метода состоит в том, что конструктор объекта может наследовать методы от другого объекта, создавая прототип объекта — prototype, на основе которого строятся все остальные новые объекты <script type="text/javascript"> // Создаём функцию-конструктор для объекта «AddCar» function AddCar(model, coast) { this['model'] = model; this['coast'] = coast; } // Вызываем функцию-конструктор, присваивая полученный объект переменной «car» var car = new AddCar('BMW', '150000'); // Добавляем новое свойство к объекту «AddCar» AddCar.prototype.color = 'silver'; window.document.write(car['model']+' '+car['coast']+' '+car['color']); </script> Свойства класса Object Свойство «constructor» Свойство ссылается на функцию-конструктор, используемую для инициализации объекта <script type="text/javascript"> // Создаём объект «str» с помощью конструктора «String» var str = new String('asd'); alert(str.constructor == String); // Выведет true /* Аналог с помощью оператора «instanceof» alert(str instanceof String); // Выведет true */ </script> Методы класса Object Метод «hasOwnProperty()» Возвращает true, если для объекта определено не унаследованное свойство с именем, указанном в единственном строковом аргументе метода. В противном случае возвращает false <script type="text/javascript"> function ListCars(model, coast) { this['model'] = model; //Устанавливаем свойство this['coast'] = coast; //Устанавливаем свойство } var car = new ListCars('BMW', '150000'); alert(car.hasOwnProperty('model')); //Возвратит true ListCars.prototype.color = 'silver'; //Унаследуем свойство alert(car.hasOwnProperty('color')); //Возвратит false </script> Методы класса Object Метод «isPrototypeOf()» Возвращает true, если имя является объектом и объект содержится в цепочке его прототипов, и false в противном случае <script type="text/javascript"> function ListCars(model, coast) { this['model'] = model; //Устанавливаем свойство this['coast'] = coast; //Устанавливаем свойство } var car = new ListCars('BMW', '150000'); alert(ListCars.prototype.isPrototypeOf(car)); // true </script> Методы класса Object Метод «propertyIsEnumerable()» Метод возвращает true, если объект имеет свойство с данным именем и это свойство не имеет атрибута DontEnum (свойство может попадать в перечисление при итерации объекта оператором for…in), и false в противном случае. Этот метод не проверяет наличие свойства по цепочке прототипов; указанным свойством должен обладать именно сам объект Методы класса Object Метод «toString()» Возвращает строку, представляющую специфицированный объект. Каждый объект имеет метод toString(), который автоматически вызывается, если объект представляется как текстовое значение или если на объект имеется ссылка в конкатенации строк Метод «toLocaleString()» Метод преобразует объект в строковое значение, учитывая формат операционной системы. Результат зависит от объекта Метод «valueOf()» Метод преобразует объект в строковое значение, учитывая формат операционной системы. Результат зависит от объекта Задания • Добавьте в объект «String» метод «trim()», удаляющий лишние пробелы вначале и конце строки; • Добавьте в объект «Number» метод «convertToStr()», преобразующий числовое значение в строку; o Учтите преобразование числа в строку через числовую переменную, а не только через строку; • Создайте для массива метод «deleteElement()», удаляющий указанный элемент из массива вместе с его порядковым номером, сдвинув на позицию вниз все идущие за ней элементы