Я начинаю новый цикл статей, которые раскроют тему использования ООП в javascript, а также приведу примеры. Будем использовать javascript вместе с библиотекой jQuery.
Поговорим о создании классов.
JavaScript поддерживает объекты и работу с ними, реализация классов, в понимании других языков программирования (полноценно поддерживающих ООП на уровне языка), ложиться на плечи самих программистов.
Хорошее представление об ООП в языке дает ресурс: http://javascript.ru/tutorial/object, где обговариваются основные приемы работы. Я же хочу поделиться сухим остатком от прочтения километров текстов документации и статей.
Задача: реализовать класс, который будет способен создавать свои экземпляры, поддерживать инкапсуляцию, полиморфизм и наследование. Последние 2 пункта обсудим в следующих статьях, а сейчас привожу пример создания класса.
var TestClass = (function(){
// Private:
var version = "1.0",
options,
defaultOptions = {
test: 1,
temp: 0
};
var privateFunction = function(){
return {data: 1};
}
// Constructor:
var Init = function(params){
options = $.extend(defaultOptions, params || {});
};
// Public:
Init.prototype = {
name: "Test Class",
getVersion: function(){
return version;
},
getOptions: function(){
return options;
}
};
return Init;
}());
testObj = new TestClass( { temp: "Tmp"} );
console.log('Version:', testObj.getVersion());
console.log('Options:', testObj.getOptions());
console.log('Name:', testObj.name);
console.log('v:', testObj.version);
В консоли будет:
Version: 1.0 - доступ к публичному методу, который вернул закрытое свойство
Options: Object { test=1, temp="Tmp"} - доступ к публичному методу, опции, как мы видим смержились со входящим массивом
Name: Test Class - Доступ к публичному свойству
v: undefined - из экземпляра, доступа к приватным полям нет (аналогично и с методами)
Таким образом, мы можем оперировать публичными методами и полями из экземпляра класса, а приватные методы/поля будут доступны только внутри класса.
Применен подход самовызывающейся функции, которая возвращает конструктор. Потому каждый экземпляр получает его (все что есть в нем) после создания.
В конструкторе используется прием мержа хеша (jQuery required), который позволяет передавать ему только те параметры, которые отличаются от "дефолтных". Такой подход, существенно упрощает работу с классом, так как нет необходимости выставлять все параметры каждый раз.
P. S. О наследовании поговорим в следующей статье.

0 коммент.:
Отправить комментарий