русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Методы класса


Дата добавления: 2015-07-09; просмотров: 1342; Нарушение авторских прав


 

Метод класса – это метод, связанный с классом, а не с экземпляром класса; онвызывается через сам класс, а не через конкретный экземпляр класса. Метод Date.parse() (описываемый в третьей части книги) – это метод класса. Он всегда вызывается через объект конструктора Date, а не через конкретный экземпляр класса Date.

 

Поскольку методы класса вызываются через функцию_конструктор, они не могут использовать ключевое слово this для ссылки на какой_либо конкретный экземп_ ляр класса, поскольку в данном случае this ссылается на саму функцию_конст_ руктор. (Обычно ключевое слово this в методах классов вообще не используется.)

 

Как и свойства класса, методы класса являются глобальными. Методы класса не работают с конкретным экземпляром, поэтому их, как правило, проще рассмат_ ривать в качестве функций, вызываемых через класс. Как и в случае со свойст_ вами класса, связь этих функций с классом дает им в пространстве имен Java_ Script удобную нишу и предотвращает возникновение конфликтов имен. Для то_ го чтобы определить метод класса в JavaScript, требуется сделать соответствую_ щую функцию свойством конструктора.

 

Пример: класс Circle

 

В примере 9.1 приводится программный код функции_конструктора и объекта_ прототипа, используемых для создания объектов, представляющих круг. Здесь можно найти примеры свойств экземпляра, методов экземпляра, свойств класса и методов класса.

 

Пример 9.1. Класс Circle

 

// Начнем с конструктора. function Circle(radius) {

// r – свойство экземпляра, оно определяется

// и инициализируется конструктором.

this.r = radius;

}

 

// Circle.PI – свойство класса, т. е. свойство функции_конструктора. Circle.PI = 3.14159;

 

// Метод экземпляра, который рассчитывает площадь круга. Circle.prototype.area = function( ) { return Circle.PI * this.r * this.r; }



 

// Метод класса – принимает два объекта Circle и возвращает объект с большим радиусом. Circle.max = function(a,b) {


 

    Глава 9. Классы, конструкторы и прототипы
     
if (a.r > b.r) return a;    
else return b;    
}      
// Примеры использования каждого из этих полей:
var c = new Circle(1.0); // Создание экземпляра класса Circle
c.r = 2.2; // Установка свойства экземпляра r
var a = c.area(); // Вызов метода экземпляра area()
var x = Math.exp(Circle.PI); // Обращение к свойству PI класса для выполнения расчетов
var d = new Circle(1.2); // Создание другого экземпляра класса Circle
var bigger = Circle.max(c,d); // Вызов метода класса max()

 

Пример: комплексные числа

 

В примере 9.2 представлен еще один способ определения класса объектов в Java_ Script, но несколько более формальный, чем предыдущий. Код и комментарии достойны тщательного изучения.

 

Пример 9.2. Класс комплексных чисел

/*

* Complex.js:

* В этом файле определяется класс Complex для представления комплексных чисел.

* Вспомним, что комплексное число – это сумма вещественной и мнимой

* частей числа, и что мнимое число i – это квадратный корень из _1.

*/

 

/*

* Первый шаг в определении класса – это определение функции_конструктора

* класса. Этот конструктор должен инициализировать все свойства

* экземпляра объекта. Это неотъемлемые "переменные состояния",

* делающие все экземпляры класса разными.

*/

function Complex(real, imaginary) {

this.x = real; // Вещественная часть числа

this.y = imaginary; // Мнимая часть числа

}

 

/*

* Второй шаг в определении класса – это определение методов экземпляра

* (и возможно других свойств) в объекте_прототипе конструктора.

* Любые свойства, определенные в этом объекте, будут унаследованы всеми

* экземплярами класса. Обратите внимание, что методы экземпляра

* неявно работают с ключевым словом this. Для многих методов никаких

* других аргументов не требуется.

*/

 

// Возвращает модуль комплексного числа. Он определяется как расстояние

 

// на комплексной плоскости до числа от начала координат (0,0). Complex.prototype.magnitude = function() {

 

return Math.sqrt(this.x*this.x + this.y*this.y);

 

};

 

// Возвращает комплексное число с противоположным знаком. Complex.prototype.negative = function() {


 

9.3. Объектно*ориентированный язык JavaScript
   

 

return new Complex(_this.x, _this.y);

};

 

// Складывает данное комплексное число с заданным и возвращает

// сумму в виде нового объекта.

Complex.prototype.add = function(that) {

return new Complex(this.x + that.x, this.y + that.y);

}

 

// Умножает данное комплексное число на заданное и возвращает

 

// произведение в виде нового объекта. Complex.prototype.multiply = function(that) {

 

return new Complex(this.x * that.x _ this.y * that.y, this.x * that.y + this.y * that.x);

}

 

// Преобразует объект Complex в строку в понятном формате.

 

// Вызывается, когда объект Complex используется как строка. Complex.prototype.toString = function() {

 

return "{" + this.x + "," + this.y + "}";

};

 

// Проверяет равенство данного комплексного числа с заданным. Complex.prototype.equals = function(that) {

 

return this.x == that.x && this.y == that.y;

 

}

 

// Возвращает вещественную часть комплексного числа.

// Эта функция вызывается, когда объект Complex рассматривается

// как числовое значение.

Complex.prototype.valueOf = function() { return this.x; }

 

/*

* Третий шаг в определении класса – это определение методов класса,

* констант и других необходимых свойств класса как свойств самой

 

* функции_конструктора (а не как свойств объекта_прототипа

* конструктора). Обратите внимание, что методы класса не используют

* ключевое слово this, они работают только со своими аргументами.

*/

 

// Складывает два комплексных числа и возвращает результат. Complex.add = function (a, b) {

 

return new Complex(a.x + b.x, a.y + b.y);

};

 

// Умножает два комплексных числа и возвращает полученное произведение. Complex.multiply = function(a, b) {

 

return new Complex(a.x * b.x _ a.y * b.y,

a.x * b.y + a.y * b.x);

};

 

// Несколько предопределенных комплексных чисел.

 

// Они определяются как свойства класса, в котором могут использоваться как "константы".

 

// (Хотя в JavaScript невозможно определить свойства, доступные только для чтения.) Complex.ZERO = new Complex(0,0);

 

Complex.ONE = new Complex(1,0); Complex.I = new Complex(0,1);


 

178 Глава 9. Классы, конструкторы и прототипы



<== предыдущая лекция | следующая лекция ==>
Свойства класса | Частные члены


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.941 сек.