Изменения

ECMAScript и все-все-все

1339 байтов добавлено, 15:20, 10 октября 2016
м
Нет описания правки
const b = 'hello';
</source>
 
* '''var''' локальны в рамках функции или Global Scope (в браузере - window)
* '''let''' и '''const''' локальны, как и положено, в рамках блока
=== Функции @@ ===
function a()
{
console.log(arguments[1]);// "abc"
}
a(1, 2"abc", 3, 4);
</source>
=== Прототипы (голый/старый JS) @@ ===
<source lang="javascript">
{
// метод класса. тут есть this
console.log(this);
}
{{gray|(Очень простая альтернатива классам)}}
* {{blue|''Объекты «создаются из функций»''}}
* У каждого объекта есть прототип
* Прототип — тоже объект, в нём функции и «свойства по умолчанию»
* У прототипа может быть свой прототип &rArr; наследование
* {{mag|object.__proto__ — __proto__}} — прототип этого объекта (класс, по сути)* {{mag|function.prototype — prototype}} — прототип, создаваемый этой функцией как конструктором
=== Наследование (голый JS) @@ ===
Для наследования в {{mag|prototype }} нужно присвоить объект, {{mag|__proto__ }} которого ссылается на базовый класс.
<source lang="javascript">
function CalendarGrid()
{
TreeGrid.call(this, arguments); // "super()"
}
CalendarGrid.prototype = Object.create(TreeGrid.prototype);
CalendarGrid.prototype.constructor = CalendarGrid;
</source>
 
=== this @@ ===
 
* this передаётся отдельно, как "контекст вызова"
* this можно "подменить" через '''function.apply(obj, arguments)''' / '''function.call(obj, arg1, arg2, ...)'''
* обычные функции/замыкания '''не помнят this''' (!)
* arrow functions '''помнят''' this
* this можно "запомнить" через function.bind() {{gray|(IE9+ / FF4+)}}
*: также через function.bind() можно сделать '''карринг'''
*: {{gray|(ну или явно создав замыкание)}}
 
=== this @@ ===
 
<source lang="javascript">
var obj = new TreeGrid();
obj.method(); // this = obj
 
var f = obj.method;
f(); // this = window
 
f.apply(obj); // this снова = obj
 
f = obj.method.bind(obj);
f(); // f привязана к obj. this = obj
 
f = function() { return f.apply(obj, arguments); }
f(); // то же самое вручную
</source>
=== Приколы @@ ===
 
 
[[Категория:VitaliPrivate]]