39 lines
3.2 KiB
Markdown
39 lines
3.2 KiB
Markdown
|
---
|
|||
|
title: Pseudoclassical Class Definition
|
|||
|
localeTitle: Определение псевдоклассического класса
|
|||
|
---
|
|||
|
Определение псевдоклассического класса происходит в 2 блоках кода вместо одного, что происходит на других языках, таких как Python и PHP.
|
|||
|
|
|||
|
Первый блок называется «конструкторской функцией», в которой объявляются атрибуты класса. Это аспекты класса, которые уникальны для каждого нового экземпляра. Пример с автомобилями заключается в том, что бренд, цвет и местоположение могут отличаться. Во втором блоке кода вы объявляете методы, которые будут использоваться каждым экземпляром класса. Примеры - это то, что может сделать автомобиль, двигаться вперед, останавливаться, открывать дверь.
|
|||
|
|
|||
|
## пример
|
|||
|
```
|
|||
|
var Car = function(brand, color, location) {
|
|||
|
this.brand = brand;
|
|||
|
this.color = color;
|
|||
|
this.location = location
|
|||
|
};
|
|||
|
|
|||
|
Car.prototype = {
|
|||
|
move: function() { this.location++; },
|
|||
|
stop: function() { this.location = 0; },
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
## объяснение
|
|||
|
|
|||
|
Причиной объявления всего класса в 2-х блоках является сохранение в памяти при запуске создания экземпляров класса. Если объявление класса было «Функциональным» стилем, то есть новая копия метода (ов), созданного для **каждого** экземпляра. Объявляя класс «псевдоклассический» стиль, только _одна_ копия методов хранится в памяти.
|
|||
|
|
|||
|
Когда экземпляр класса попытается получить доступ к методу:
|
|||
|
```
|
|||
|
var x_car = new Car('lexus', 'white', 0);
|
|||
|
x_car.move();
|
|||
|
```
|
|||
|
|
|||
|
Переводчик будет на самом деле _первый_ не найти вызываемый метод в самом объекте , так как это было сделано из конструктора функции автомобиля. Как вы можете видеть выше, нет ссылки на какой-либо из методов в функции конструктора Car. Оттуда интерпретатор ищет `Car.prototype` который теперь разделяется между всеми экземплярами. Там переводчик находит метод, который был вызван!
|
|||
|
|
|||
|
### Дальнейшее чтение:
|
|||
|
|
|||
|
[Блог пользователя Natac](https://natacseanc.wordpress.com/2015/08/04/javascript-object-create-and-classes/)
|
|||
|
|
|||
|
[Классы MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript)
|