JavaScript: Использование прототипов
|
Прототипы в Javascript`е появились с версии 1.1. С помощью прототипов можно добавлять новые свойства и параметры к уже существующим объектам. |
Объект <= Класс <= Экземпляр классаИллюстрация показывает, что экземпляр класса наследует все свойства и методы класса, который, в свою очередь, наследует свойства и методы объекта, на основе которого был создан класс.
Создание объекта здесь ничем не отличается от аналогичного процесса при создании объекта с помощью конструкторов.
function MyObject(id, name)
{
//Устанавливаем значения
this._id = id;
this._name = name;
}
Если вдруг мы захотим создать новое свойство для объекта MyObject, то сделать это можно будет следующим образом:
var MyInstance = new MyObject(5,"some value"); MyInstance.newproperty = true;Как видите, создать новое свойство для объект не сложно, но оно будет доступно только на данном экземпляре и не будет распространятся на другие. Чтобы решить эту проблему, стоит использовать прототипы.
var MyInstance = new MyObject(5,"some value"); MyInstance.prototype.newproperty = false; MyInstance.newproperty = true;Это не является лучшим решением использования прототипов - это просто пример. Почему это не является лучшим решением? Потому что код будет трудно сопровождать, если свойства объектов не как положено (в самом объекте), а в произвольном месте скрипта.
Свойствам, созданным через прототипы, можно задавать значения по умолчанию. Впоследствии их можно будет перезаписать (это было показано в предыдущем примере).
Как и следовало ожидать, помимо свойств можно создавать и методы. Вот простой пример того, как это сделать.
//Используем наш объект, а не экземпляр.
MyObject.prototype.getId = function()
{
return this._id;
}
Механизм прототипов мощен не только по вышеперечисленным возможностям, но и потому, что можно улучшать собственные объекты Javascript, такие как String, Array, и другие. Приведу простой пример:
//Функция получения количества слов в строке
function getWordsCount()
{
return this.split(" ").length;
}
//Назначаем функцию прототипу
String.prototype.getWordsCount = getWordsCount;
//Пример использования:
var mystring = "My Test String";
alert(mystring.getWordsCount()); //Должно вывести число 3
« Назад