Функция: прототип
Каждый конструктор имеет свойство, называемое прототипом (прототип, больше не переведен ниже, используйте его исходный текст). Это свойство очень полезно: объявить общие переменные или функции для конкретного класса.
Определение прототипа
Вам не нужно явно объявлять свойство прототипа, потому что оно существует в каждом конструкторе. Вы можете взглянуть на следующий пример:
Пример PT1
Кода -копия выглядит следующим образом:
Функциональный тест ()
{
}
оповещение (тест. Прототип); // вывод "объект"
Добавить свойства в прототип
Как вы можете видеть выше, прототип является объектом, поэтому вы можете добавить к нему свойства. Атрибут, который вы добавляете в прототип, станет общим атрибутом для объекта, созданного с использованием этого конструктора.
Например, у меня есть рыба типа данных ниже, и я хочу, чтобы все рыбы обладали этими свойствами: livesin = "вода" и цена = 20; Чтобы достичь этого, я могу добавить эти свойства к прототипу конструктора.
Пример PT2
Кода -копия выглядит следующим образом:
Функциональная рыба (имя, цвет)
{
this.name = name;
this.color = color;
}
Fish.prototype.livesin = "Вода";
Fish.prototype.price = 20;
Далее давайте сделаем несколько рыб:
Кода -копия выглядит следующим образом:
var fish1 = новая рыба ("mackarel", "grey");
var fish2 = новая рыба ("золотая рыбка", "апельсин");
var fish3 = новая рыба («лосось», «белый»);
Давайте посмотрим, какие свойства рыба:
Кода -копия выглядит следующим образом:
для (int i = 1; i <= 3; i ++)
{
var fish = eval_r ("Fish"+i); // я просто получаю указатель на эту рыбу
Alert (Fish.name+","+Fish.color+","+Fish.livesin+","+Fish.price);
}
Вывод должен быть:
Кода -копия выглядит следующим образом:
"МакКарел, серая, вода, 20"
"Золотая рыбка, апельсин, вода, 20"
"Лосось, белая вода, 20"
Вы видите, что все рыбы имеют атрибуты жизни и цены, и мы даже не заявляем эти атрибуты для каждой разных рыб. В настоящее время, когда создается объект, конструктор назначит свой прототип атрибута во внутренний атрибут нового объекта __proto__. Этот __proto__ используется этим объектом, чтобы найти его свойства.
Вы также можете использовать прототип для добавления общих функций ко всем объектам. Это имеет одно преимущество: вам не нужно создавать и инициализировать эту функцию каждый раз, когда вы строите объект. Чтобы объяснить это, давайте снова посмотрим на пример DT9 и переписаем его, используя прототип:
Используйте прототип, чтобы добавить функции в объекты
Пример PT3
Кода -копия выглядит следующим образом:
Функция сотрудника (имя, зарплата)
{
this.name = name;
это .salary = зарплата;
}
Employee.prototype.getSalary = function getAlaryFunction ()
{
вернуть это .salary;
}
Employee.prototype.addsalary = функция addsalaryfunction (дополнение)
{
this.salary = this.salary+добавление;
}
Мы можем создавать объекты, как обычно:
Кода -копия выглядит следующим образом:
var boss1 = новый сотрудник («Джоан», 200000);
var boss2 = новый сотрудник ("kim", 100000);
var boss3 = новый сотрудник ("SAM", 150000);
И подтвердите это:
Кода -копия выглядит следующим образом:
Alert (boss1.getsalary ()); // Выход 200000
Alert (boss2.getsalary ()); // Вывод 100000
оповещение (Boss3.getSalary ()); // Вывод 150000
Вот диаграмма, чтобы проиллюстрировать, как работает прототип. Каждый экземпляр этого объекта (Boss1, Boss2, Boss3) имеет внутреннее свойство под названием __proto__, которое указывает на прототип собственности своего конструктора (сотрудник). Когда вы выполняете Getsalary или AddSalary, этот объект найдет и выполнит этот код в своем __proto__. Обратите внимание: здесь нет копии кода (сравните его с примером диаграммы DT8).