Изменения

Перейти к: навигация, поиск

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

3459 байтов добавлено, 15:05, 10 октября 2016
Нет описания правки
== Можно писать и на префорке @@ %% ==
Но...Но…
<div style="background: #ff0080; color: white; font-family: Consolas, Droid Sans, monospace; padding: 10px; display: inline-block; text-align: center !important">
можно и не девочкой, но уже не то»
</div>
 
== Обзор языка @@ %% ==
 
=== Типы данных @@ ===
 
Типы данных (что может вернуть typeof):
* '''null''' {{gray|(не NULL, всё регистрозависимо)}}
* '''undefined''' {{gray|("не определено")}}
* '''number''': <tt><nowiki>1, −100500.05, NaN</nowiki></tt>
* '''boolean''': <tt><nowiki>true, false</nowiki></tt>
* '''string''': <tt><nowiki>"hello1", 'hello2'</nowiki></tt> {{gray|(всегда Unicode)}}
* {{gray|'''symbol''' — для «скрытых полей» (ES6)}}
* всё остальное — '''object'''
** хеш — объект дефолтного типа: <tt><nowiki>{ key: "value" }</nowiki></tt>
** массив — разновидность объекта (класс Array): <tt><nowiki>[ "value1", 2, 3, "value3" ]</nowiki></tt>
** функции — тоже объекты, их typeof = '''function'''
 
=== Переменные @@ ===
 
<source lang="javascript">
var a = 123;
</source>
 
Новый синтаксис ES6: let/const.
 
<source lang="javascript">
let a = 123;
const b = 'hello';
</source>
 
=== Функции @@ ===
 
Функции — объекты первого класса в JS.
 
<source lang="javascript">
function f(arg)
{
return arg;
}
var f = function(a)
{
return a*a;
};
</source>
 
Новый синтаксис ES6: arrow functions
 
<source lang="javascript">
var f = a => a*a;
var g = (a, b) => a*b;
</source>
 
=== Замыкания @@ ===
 
Функции в JS являются замыканиями («замыкаются» на текущую область видимости):
 
<source lang="javascript">
function a(arg)
{
var sum = 0;
var f = function(x) { sum += x; };
var g = function() { return sum; };
return [ f, g ];
}
</source>
 
Вызывать функцию можно с любым числом аргументов, пропущенные будут undefined, лишние — в arguments.
 
<source lang="javascript">
function a()
{
console.log(arguments);
}
a(1, 2, 3, 4);
</source>
 
=== Прототипы @@ ===
 
<source lang="javascript">
function TreeGrid()
{
// конструктор. тут есть this
}
TreeGrid.prototype.method = function()
{
// метод класса. тут есть this
}
 
var obj = new TreeGrid();
obj.method();
</source>
 
=== Прототипы @@ ===
 
{{gray|(Очень простая альтернатива классам)}}
 
* ''Объекты «создаются из функций»''
* У каждого объекта есть прототип
* Прототип — тоже объект, в нём функции и «свойства по умолчанию»
* У прототипа может быть свой прототип &rArr; наследование
* object.__proto__ — прототип этого объекта (класс, по сути)
* function.prototype — прототип, создаваемый этой функцией как конструктором
 
=== Наследование (голый JS) @@ ===
 
Для наследования в prototype нужно присвоить объект, __proto__ которого ссылается на базовый класс.
 
<source lang="javascript">
function CalendarGrid()
{
}
 
CalendarGrid.prototype = Object.create(TreeGrid.prototype);
CalendarGrid.prototype.constructor = CalendarGrid;
</source>
 
=== Приколы @@ ===
[[Категория:VitaliPrivate]]

Навигация