
Russian: 
Здравствуйте и Добро пожаловать на Techsith Учебник! Сегодня мы будем изучать статические
методы Классов в JavaScript. Мы начнем с разницы между методом экземпляра
и методом класса, где метод класса является статическим методом и потом мы
взглянем на равноценный метод где мы не будем использовать классы. В  конце мы
посмотрим на практический пример, где мы должны использовать статический метод класса.
Кстати , все примеры что мы изучаем в этом учебнике будут на Techsith.com
сайте , так что Вы можете изучить их  более детально и попрактиковаться. Они все
будут так же на jsfiddle. Я предоставлю ссылки в описании. Так же, если Вы можете
помочь мне перевести это видео на любой язык, которым Вы владеете, что бы
Ваши соотечественники могли так же изучать JavaScript,  если они не знают английского
и третье, пожалуйста, будьте моим покровителем, если вы еще им не являетесь, ссылка

English: 
hello and welcome to Techsith Tutorials!
Today we are going to learn about static
class methods in javaScript. we'll first
start with difference between instance
method and a class methods, where class
method being the static methods. and  then we
look at the equivalent method when we're
not using classes and then in the end we
look at a practical example of where we
should use this static methods. By the
way all the examples that we learned in
this tutorial are going to be on Techsith.com
site so you can look at them in the
detail and practice. They are all
going to be in jsfiddle. I'll provide a
link in the description. Also if you can
help me translate this video into
whichever language that you speak so
your countrymen can also learn
JavaScript, if they don't know English
and third please become my patreon if
you haven't done so, the the link is

English: 
going to be in the description. All right
so let's get to coding so I'm going to
build my first class and then add a
static method to it so the class going
to be Car. I'm just gonna say class
car and inside I'm just gonna have a
simple static method and the way you
write static method is by putting static
keyword in front of a method. so I'm just
gonna say static and I'm gonna have a
method call compare price now it's not
compare price right now but I'm just
gonna show you how it works so inside
all its gonna do is console.dir() and
it's gonna print this. I'm gonna do this
because I wanna when I want to call it I
want to know what is what is being
called and so the way you call it is, you

Russian: 
будет в описании. Хорошо, давайте начнем кодить, я собираюсь
создать мой первый класс и потом добавить в него статический метод, назовем класс
Car. Я только что обьявил класс Car и внутри него , сейчас собираюсь
создать простой статический метод , это можно сделать путем добавления  слова static
впереди названия метода. Так что я просто печатаю static и собираюсь
назвать этот метод  comparePrice, сейчас это не сравнение цены, как таковой, но я просто
собираюсь показать Вам как это работает,  внутри я выведу console.dir()  и
она будет выводить this. Я собираюсь вывести в методе this, потому что когда я вызову этот метод я
хочу знать, что именно я вызвал. Способ которым Вы можете вызвать его,

English: 
call directly on the class itself so
I'll say car.comparePrice() and let's
say what it would give me.If I run
this, I would get the class Car back
so basically static methods are called
on the class
The difference between the static
method an instance method is the
instance methods are called on the
instance of a class so when I take the
class and create objects from it
basically instances of the class I can
call the instance method on 
these objects. But class method which is
static method are directly called on the
class itself so that's what I'm calling
it on a Car. now let's create an instance
method so I'm just gonna add another
method call getColor(). As you can see
there is no static in front of it so
it's an instance method. It will do
the same thing, it will just say console.dir(this)

Russian: 
Вы просто вызываете метод непосредственно из класса, так что я набираю  Сar.comparePrice() и давайте
посмотрим что он выдаст мне. Если я запущу его я получу класс Car.
Так что по сути статически методы вызываются непосредственно из класса
Разница между статическим методом и методом экземпляра
в том, что методы экземпляра вызываются в экземплярах класса, так что когда я беру
класс и создаю объект  - по сути экземпляр класса ,  я могу
вызвать метод экземпляра этого объекта, но метод класса , который есть
статическим методом я вызываю напрямую через класс. Так что, вот почему я вызываю
его в Car. Теперь , давайте создадим метод экземпляра, так что я просто собираюсь добавить другой
метод с названием getColor(). Как Вы можете видеть здесь нет слова static впереди , это
значит что это метод экземпляра. Сделаем те же действия , просто выведем console.dir(this)

Russian: 
я собираюсь создать экземпляр класса Car. И я
напишу const newCar = new Car(). Хорошо, теперь я
создал экземпляр класса и могу вызвать метод экземпляра у него . Так что
я могу написать getСolor() и запустить его. Хорошо,  первый из них который new
Car - вывел мне объект car и второй из них вывел мне класс Car, если я
раскрою класс и увижу метод comparePrice() непосредственно внутри класса, помните
это не прототипный метод. В  последнем руководстве про "Классы и
подклассы в деталях" когда мы добавляли метод экземпляра от попадал в прототип
как вы можете видеть -  прототип и внутри прототипа я могу увидеть
метод getColor(). Тем не менее, статический метод находится внутри класса, он не находится

English: 
I have to create an
instance of this class Car. I'm gonna
say const newCar = new Car(); ok so now I
create an instance of class and now I
can call an instance method on this so I
would say get color and let's run this
alright so the first one which is a new
car is giving me a car object and the
second one is giving me class car if I
expand the class I would see the compare
price directly inside the class remember
it's not a prototype method in last
tutorial we looked at the class and
subclasses in detail and when you add an
instance method it goes in the prototype
as you can see there's a prototype and
inside the prototype I would see the get
color method here however the static
method goes inside the class it doesn't

English: 
go in his prototype so that's the main
difference. When I look at the object Car.
I won't find the static method. you
would only see the class method which is
getColor().  Now, let's add
proper constructor and make this more a
useful  example. I'm just gonna say
constructor and this would have two
properties. The first just going to be
color and then
second is going to be price and inside
what it will do is,  it will set the
initial properties for this class and I'm
just gonna use object.assign() this
class. I'm using object.assign()
so I don't have to do
this.color equal to color. 
this.price equal to price . if you

Russian: 
внутри прототипа , так что это главные отличия. Когда я смотрю на объект Car
я хочу найти статический метод, но Вы видите только метод класса который есть
getColor(). Теперь давайте добавим правильный конструктор и сделаем этот пример более
полезным. Я просто собираюсь напечатать constructor и с двумя
свойствами. Первое будет color и потом
второе будет price . И  внутри него, мы собираемся установить
начальные свойства для этого класса. Я просто собираюсь использовать Object.assign()  для
класса. Я использую Object.assign() и по-этому мне не надо делать так
this.color присвоить color, this.price присвоить price , если вы

Russian: 
не знаете что такое object.assign() , у меня есть руководство, я оставлю ссылку здесь
Хорошо, теперь метод  getСolor() будет просто
возвращать this.color и теперь вернемся к статичному  методу , Так для чего мы
собираемся его использовать? Посмотрим как getColor() на самом деле использует this.color внутри себя
самого. Статический метод не использует доступ через this к свойствам. Статический метод
по сути используется как полезная функция. Здесь, в этом методе
comparePrice(), что я хочу сделать? я хочу сравнить цену двух разных
машин. Так что, что я могу передать первый объект машины и второй объект. Теперь это будут

English: 
don't know what object.assign() is I
have a tutorial I'll provide a link here.
alright and then the get color method
would be simply this dot it would just
say "return this.color" and now comes
to the static method. so what is it going to
be used for? See how the getColor() is
actually using this.color inside its
body. A static method doesn't use this to
access the properties. Static method are
basically used for sort of like a
utility functions. Here in this
comparePrice() what I want to do is I
want to compare price of two different
cars.so I can pass car one object and
car two object. now this is going to be

English: 
instances of this car so it's gonna be
objects and inside what I'm gonna do is
I'm just going to say return math.abs(car1.price  - car2.price)
 
As you can see I'm not using this dot
prize or anything basically what it does
it's not using objects properties. if
instead it would use the parameters that
it's been passed it's not setting or
getting anything to the object itself so
now let's create two cars so I'm gonna
say const redCar = new car(). now
remember it has two properties color so
this is gonna be red and it's gonna it's

Russian: 
экземпляры этих машин, это будут объекты. И теперь внутри
я просто буду возвращать math.abs(car1.price - car2.price)
 
Как вы можете видеть, я не использую this точка price или что-то типа этого
он не использует свойства объектов, вместе этого метод использует параметры
которые ему передали, он ничего не устанавливает и не получает из самого объекта
Теперь давайте создадим две машины. Я буду печатать const redCar = new car(). теперь
запомните. Он имеет два свойства -   цвет, будет  - "красный" и второе будет

English: 
gonna say hundred dollars. that's a cheap
car and the second car is going to be
blue car and it's gonna have a color
blue and its price gonna be 102 dollars.
the blue car is a little bit expensive
than the red car I don't know why
usually the red car supposed to be more
flashy and more expensive but who cares.
And now in the compareprice() I'm just
gonna pass red car and blue car and
let's put the console.log in front of
both so when I run this now here it says
new car should say red car color and
when I run this the first one gives me
the red because the red car as I get
color it gives me the property back red

Russian: 
сто долларов. Это дешевая машина. И вторая машина будет
синяя и будет иметь цвет синий и ее цена будет 102 доллара
Голубая машина немного дороже чем красная машина. Я не знаю почему?
Обычно красная машина должна быть более роскошной и более дорогой , но кого это волнует.
И теперь в comparePrice() я просто передам красную машину и синюю машину и
давайте вставим console.log в начале обоих , когда я запущу это сейчас, здесь оно скажет
new Car должна сказать красный цвет машины. И когда я запущу первый  экземпляр, выдает мне
красный, потому что красная машина выдает мне свойство цвета красный, который я ей дал

Russian: 
и сравнение цен по сути сравнивает цену красной машины и
синей машины и выдает мне разницу между двумя, котороя составляет 2
доллара. Так что здесь compareРriсe() отличный полезный метод для объектов
машин, который не манипулирует никакими свойствами, но предоставляет полезный функционал для
сравнения цены. Давайте предположим, что я хочу пересчитать с галлона на милю в галлон на  километр
используя полезный метод, Я могу, Я могу создать другой полезный метод который будет
статическим методом и будет по сути брать галлон на милю  и возвращать
пересчитанный галлон на километр но он ничего не будет делать
с самим объектом Car , он предоставляет автомобилю полезней фунционал , и когда Вы отнаследуете
класс, что бы сделать подкласс, подкласс так же будет иметь статический метод и класс также
будет иметь статический метод , так что давайте посмотрим как это работает.
Давайте посмотрим на маленький другой пример и это тоже будет

English: 
and the price compared basically
compares a prize of the the red car and
a blue car and it gives me the
difference between two which is two
dollars so here the compare prize is a
nice utility function for for the car
object that doesn't manipulate any
properties but it provides a utility to
compare prices. let's say if I want to do
convert mile per gallon to kilometer per
gallon as a utility, I can I can write
another utility function which would be
a static method and it would basically
take mile per gallon and it would return
the converted to kilometer per gallon
but that's nothing to do with
the Car object itself but it provides
car-related utility now when you extend
a class to make a subclass subclass can
also have a static method and class can
also have a static method so let's look
at how it works
so let's look at a little different
example but this is also going to be a

English: 
class car. All right so I have a class
car and I have a constructor which
simply sets the price and I'm gonna have
a static method called sellCar which
basically takes the car as an argument
now this is not a you can see this is
not a class
it's an object so don't confuse with this
because there's a capital here and
inside the body it would basically
return "selling for" and then I'm just
gonna put the price of this.price

Russian: 
класс Car. Хорошо, я теперь имею класс Car и у меня есть конструктор который
просто устанавливает цену и у меня будет статический метод с названием sellCar который
по сути принимает объект car как аргумент. Это, то что вы видите
это не класс, это объект, по-этому не путайте в этом -
потому что заглавная буква здесь. И внутри тела, это будет по сути
возврат значения "selling for" и затем я просто вставлю цену как this точка price

Russian: 
Теперь, давайте отнаследуем этот объект машины, так что я могу набрать "class Toyota extends car"  и
отнаследовать Toyota от класса Car и она так же будет иметь цену, я просто
собираюсь набрать super(price), потому что я не хочу чтобы Toyota имела свои собственные свойства, но она
может иметь свой собственный статичный метод с таким же именем , так что мы печатаем sellСar и
он так же будет принимать объект машины но здесь
мы печатаем return "toyota super.sellCar ()" и будем передавать машину здесь
Хорошо, теперь у меня есть класс машины и есть
подкласс который называется Toyota, теперь давайте создадим объект класса Toyota. Так я
могу напечатать "const camry = new toyota()" и цену в сто долларов. Это

English: 
Now, let's extend this car object so I
can say "class Toyota extends car" so
creating Toyota from the class car and
it would also have price and I'm just
gonna say super(price) cuz I don't want
to have Toyota's own properties and it
can have its own static method with the
same name so it can say sell car and it
would also have car object passed but here.
it would say return toyota super.sellCar () and it would pass car here.
all right so I have a class car and have
a sub class called Toyota now let's
create an object from this Toyota. so I
can say const camry = new toyota()
and the price is hundred dollars. it's

Russian: 
очень дешевая camry и я просто печатаю "console.log (Toyota.sellcar()) " и
я просто передаю объект Camry сюда и это то что я хочу
запомнить. Он вызывается у класса  Toyota, а не у объект, он
принимает объект как параметр. Когда я запускаю его он выдает мне  "Toyota была продана за
undefined". Почему? Почему? Почему? Помните? Это значение вверху, оно должно быть ценой автомобиля,
потому что вы НЕ должны вызывать this внутри статических методов, вот почему.
Он выдал мне undefined. Я снова запущу его и он выдаст мне Toyota была продана
за $100, так что оно работает. Хорошо, это все про статические методы класса. И мы

English: 
really cheap camry and i'm just gonna
say console.log (Toyota.sellcar()) and
I'm just gonna pass this Camry object
here and that's it what I get so
remember it's calling on the class which
is Toyota are not on the object it
passes the object inside. so if I run
this it gives me Toyota selling for
undefined why why why remember this top
prize is supposed to be car dot price
because you're not supposed to call this
inside the static method. so that's why
it's giving me and undefined. I'm gonna say
run again is giving me Toyota selling
for $100 so it works alright that's all
about static class methods. and we are

English: 
closing to the end of this larger series
on object-oriented javaScript. and if you
haven't started from the beginning you
can do so. I will provide a link here but we
still have a couple of tutorials left we
still need to do a decorators and class
mixes we haven't done so that's next and
I hope you liked it tutorial and if you
did please like subscribe and provide a
constructive comment. Thank You! :)

Russian: 
подходим к концу это большой серии про ООП в JavaScript. И если Вы
еще не начинали смотреть все с самого начала, Вы можете начать. Я предоставлю ссылку здесь, но до сиг пор
есть еще несколько разделов, которые я должен изложить  - декораторы и
примеси, так что надеюсь следующими будут эти разделы. И если Вы
еще не подписались, пожалуйста подпишитесь и оставьте конструктивный комментарий. Спасибо! :-)
