Язык программирования JavaScript · 2018-03-16 · Классы....
Transcript of Язык программирования JavaScript · 2018-03-16 · Классы....
![Page 1: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/1.jpg)
Язык программирования JavaScript
Ильюшин Евгений АльбиновичМосковский Государственный Университет им. М.В.Ломоносова
Факультет Вычислительной Математики и КибернетикиЛаборатория ОИТ
![Page 2: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/2.jpg)
Классы. Ключевые слова class и constructor.Конструкция • 'class' не более чем синтаксический сахар для описания конструктора объектов и задания прототипа.
func%on EmployeeFunc(name, age=33) {this.name = name;this.age = age;this.foo = func%on () { };
}
class EmployeeClass {//Создаётся функция с именем EmployeeClass//Определяем сигнатуру функции EmployeeClass и содержимое ее телаconstructor(name, age=0) {
this.name = name;this.age = age;
}foo() {}
}
![Page 3: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/3.jpg)
Классы. Ключевые слова extends и super.
class Manager extends EmployeeClass {constructor(name, age) {
super();//Вызываем конструктор родительского классаthis.name = name;this.age = age;
}staSc foo(){
console.log("It's foo");}
}
![Page 4: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/4.jpg)
Классы. Ключевые слова extends и super.
class Manager extends EmployeeClass {
constructor(name, age) {
//Так работать не будет, прежде нужно вызвать метод super()
this.name = name;
this.age = age;
}
}
![Page 5: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/5.jpg)
Классы. Вызов метода родительского класса.
class Manager extends EmployeeClass {constructor(name, age) {
super();this.name = name;this.age = age;
}callFoo() {
super.foo() }}
![Page 6: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/6.jpg)
Классы. Ключевое слово static.class Sta(cMethodCall {
sta(c sta(cMethod() {return 'Sta(c method has been called'
}
sta(c anotherSta(cMethod() {return this.sta(cMethod() + ' from another sta(c
method';}
}Sta(cMethodCall.sta(cMethod(); Sta(cMethodCall.anotherSta(cMethod(); // 'Sta(c method has beencalled from another sta(c method'
![Page 7: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/7.jpg)
Функции.
Функция• является подтипом объекта, в спецификации называется"callable object", так как содержит предопределённое свойство Call, которое позволяет ее вызывать.Могут иметь до 255 аргументов•
![Page 8: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/8.jpg)
Функции. Объявление функции.
Объявление функции (• Func4on Declara4on)func%on foo(arg1, arg2) {
console.log(arg1,'\n',arg2);
for ( let i = 0; i < arguments.length; i++){console.log(arguments[i]);
}}
foo('Print arg1','Print arg2')
Аргументы • примитивных типов передаются по значению, составных по ссылкам.
![Page 9: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/9.jpg)
Функции.
Функция всегда что• -то возвращает:§ либо результат с командой return
если § return не вызывается или вызывается без значения, то возвращается undefined
func@on setData(age, name, employee){age = 32;name = 'John';employee.name = name;employee.age = age;
}console.log(setData(age, name, Employee));//undefined
Вызов • return приводит к выходу из функции.
![Page 10: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/10.jpg)
Функции. Объявление функции.
Еще один способ объявления функции (• Func9on Expression)let foo = func9on(arg1, arg2){
console.log(arg1,'\n',arg2);
for(let i=0; i<arguments.length; i++){console.log(arguments[i]);
}}foo('Print arg1','Print arg2')
![Page 11: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/11.jpg)
Функции. Объявление функции.
Отличие между • Func0on Declara0on и Func0on Expression в том что функции, объявленные как Func0on Declara0on, создаются интерпретатором до выполнения кода.
foo('Print arg1','Print arg2');//error
let foo = func0on(arg1, arg2){console.log(arg1,'\n',arg2);
for ( let i = 0; i < arguments.length; i++){console.log(arguments[i]);
}}
![Page 12: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/12.jpg)
Функции. Объявление функции.
foo('Print arg1','Print arg2');//it works
func8on foo(arg1, arg2){console.log(arg1,'\n',arg2);
for ( let i = 0; i < arguments.length; i++){console.log(arguments[i]);
}}
![Page 13: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/13.jpg)
Функции. Замыкание.
Замыкания • - это средства, с помощью которых внутренняя функция может ссылаться на переменные, присутствующие в родительской (внешняя объемлющая функция) после того как родительская функция прекратила своё существование.
func/on parent(){let phrase = "I'm parent";return func/on(){
return phrase;}
}let foo = parent();console.log(foo());//I'm parentconsole.log(foo());//I'm parent
![Page 14: Язык программирования JavaScript · 2018-03-16 · Классы. Ключевые слова class и constructor. •Конструкция 'class'не более](https://reader033.fdocuments.us/reader033/viewer/2022050105/5f43c6576b300a387706cdb5/html5/thumbnails/14.jpg)
Функции.
Каждая функция имеет внутренний объект• LexicalEnvironment. При • запуске функции в этот объект записываются параметры, внутренние переменные и функции. Так • же в момент создания функции во внутреннее свойство Scopeзаписывается внешний объект, содержащий внешние переменные. Т.е. Scope это скрытое свойство, которое ссылается на внешние окружение, в котором была создана функция.