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
« Назад