Lecture 4-5
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# LEC 4. Java-bruh-script
|
# LEC 4-5. Java-bruh-script
|
||||||
## History
|
## History
|
||||||
При разработке отталкивался от языков:
|
При разработке отталкивался от языков:
|
||||||
- Self - диалект Small Talk (первый ООП-подобный язык)
|
- Self - диалект Small Talk (первый ООП-подобный язык)
|
||||||
@@ -152,4 +152,109 @@ console.log(arr.length); // 11
|
|||||||
- join
|
- join
|
||||||
- slice
|
- slice
|
||||||
- splice
|
- splice
|
||||||
- sort
|
- sort
|
||||||
|
|
||||||
|
## Области видимости
|
||||||
|
Всё как в обычных ЯП
|
||||||
|
|
||||||
|
## Замыкание
|
||||||
|
Замыкание = (функция) + внешнее лексическое окружение
|
||||||
|
|
||||||
|
```js
|
||||||
|
function makecount(){
|
||||||
|
var cur_co = 1;
|
||||||
|
return function(){
|
||||||
|
return cur_co++;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var counter = makecount();
|
||||||
|
```
|
||||||
|
|
||||||
|
## Контекст-this
|
||||||
|
```js
|
||||||
|
var admin = {name: "PIE"}
|
||||||
|
var user = {name : "CHOCO"}
|
||||||
|
function func(){
|
||||||
|
alert(this.name)
|
||||||
|
}
|
||||||
|
admin.g = func;
|
||||||
|
user.u = func;
|
||||||
|
admin.g(); // PIE
|
||||||
|
user.u(); // CHOCO
|
||||||
|
func() // undefined
|
||||||
|
```
|
||||||
|
|
||||||
|
### Манипуляции с контекстом
|
||||||
|
- ```func.call(context, arg1 arg2, ...);``` - вызывает функцию однократно
|
||||||
|
- ```func.apply(context, [arg1, arg2, ...]);``` - то же самое, но с двумя аргументами
|
||||||
|
- ```var wrapper = func.bind(context[, arg1, arg2, ...]);``` - создание копии функции, но фиксируется контекст функции и аргументы - карирование
|
||||||
|
|
||||||
|
## ООП-функциональный стиль
|
||||||
|
Задание публичного:
|
||||||
|
- метода
|
||||||
|
```js
|
||||||
|
this.getVar = function(){
|
||||||
|
return _another;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
- свойства:
|
||||||
|
```js
|
||||||
|
this._dem = 1;
|
||||||
|
```
|
||||||
|
|
||||||
|
Приватное свойство и/или метод задаётся так же, но без ```this```.
|
||||||
|
|
||||||
|
### Наследование
|
||||||
|
Базовый класс
|
||||||
|
```js
|
||||||
|
function A(){
|
||||||
|
this.enable = function(){
|
||||||
|
...
|
||||||
|
}
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Производный класс
|
||||||
|
```js
|
||||||
|
function B(){
|
||||||
|
Machine.call(this, [, arg1, ...]);
|
||||||
|
// Machine.apply(this, [, args]);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## Прототипный стиль ООП
|
||||||
|
Функции остались (блень)
|
||||||
|
|
||||||
|
Базовый класс
|
||||||
|
```js
|
||||||
|
var car {
|
||||||
|
fuel: 0.7;
|
||||||
|
fph: 9.;
|
||||||
|
ride: function(dist){
|
||||||
|
...
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Производный класс:
|
||||||
|
```js
|
||||||
|
var truck {
|
||||||
|
longback: true;
|
||||||
|
__proto__: car;
|
||||||
|
}
|
||||||
|
|
||||||
|
truck.ride();
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
obj.hasOwnProperty()
|
||||||
|
Object.getPrototypeOf(obj, [proto])
|
||||||
|
obj1 instanceof obj2
|
||||||
|
obj2.isPrototypeOf(obj1)
|
||||||
|
```
|
||||||
|
|
||||||
|
В прототипном стиле все поля пубичные
|
||||||
|
|
||||||
|
## Обработка операций
|
||||||
|
Событийно-ориентированный
|
||||||
Reference in New Issue
Block a user