Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Конструктором становится любая функция, вызванная черезnew.




Например:

function Animal(name) {

 

this.name = name;

 

this.canWalk = true;

 

}

 

 

 

var animal = new Animal("ёжик");

Любую функцию можно вызвать при помощи new. При этом она работает несколько иным образом, чем обычно:

  1. Автоматически создается новый, пустой объект.
  2. Специальное ключевое слово this получает ссылку на этот объект.
  3. Функция выполняется. Как правило, она модифицирует this, добавляет методы, свойства.
  4. Возвращается this.

Так что результат выполнения примера выше — это объект:

animal = {

 

name: "ёжик",

 

canWalk: true

 

}

О создаваемом объекте говорят, что это «объект класса(или типа) Animal».

Термин «класс» здесь является профессиональным жаргоном. Во многих других языках программирования есть специальная сущность «класс». В JavaScript её нет, но кое-что похожее организовать можно, поэтому так и называют.

Функция может возвратить другой объект вместо this

Если функция явно возвращает объект, то будет возвращён он, а не this.

Например:

 

function BigAnimal() {

 

 

 

this.name = 'Мышь';

 

 

 

return { name: 'Годзилла' }; // <-- будет возвращено

 

}

 

 

 

alert( new BigAnimal().name ); // Годзилла

Если функция возвращает не объект, к примеру, число, то такой вызов return ни на что не повлияет. Например:

 

function BigAnimal() {

 

 

 

this.name = 'Мышь';

 

 

 

return 'Годзилла'; // не объект, такой return в режиме new ни на что не влияет

 

}

 

 

 

alert( new BigAnimal().name ); // Мышь

Эта особенность работы new прописана в стандарте, знать о ней полезно, но используется она весьма редко.

Названия функций, которые предназначены создавать объекты, как правило, начинают с большой буквы.

Кстати, при вызове new без аргументов скобки можно не ставить:

var animal = new BigAnimal; // <-- без скобок

 

// то же самое что

 

var animal = new BigAnimal();

Возможны ли такие функции A и B в примере ниже, что соответствующие объекты a,b равны (см. код ниже)?

function A() { ... }

 

function B() { ... }

 

 

 

var a = new A;

 

var b = new B;

 

 

 

alert( a == b ); // true

Создание методов в конструкторе

Использование функций для создания объекта дает большую гибкость. Можно передавать функции свойства создаваемого объекта и параметры, определяющие как его создавать.

Например, функция User(name) создает объект с заданным значением свойства name и методомsayHi:

function User(name) {

 

this.name = name;

 

 

 

this.sayHi = function() {

 

alert("Моё имя: " + this.name);

 

};

 

}

Пример использования:

var ivan = new User("Иван");

 

 

 

/* Объект ivan имеет вид:

 

{

 

name: "Иван",

 

sayHi: функция, обращение к имени идёт через this.name

 

}

 

*/

 

 

 

ivan.sayHi(); // Моё имя: Иван

Поделиться:

Дата добавления: 2015-09-15; просмотров: 80; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты