Персональные инструменты
Счётчики

JavaScript

Материал из Lurkmore
Перейти к: навигация, поиск
Facepalm kyon sq.jpgЭта статья состоит из уныния и отчаяния.
Сделайте с ней что-нибудь.
Пожалуйста.

Содержание

Javascript

Javascript — жопный скриптовый язык, чаще всего использующийся при создании сценариев поведения браузера, встраиваемых в веб-страницы. Является одной из реализаций языка ECMAScript.

Благодаря Javascript появилась возможность проведения XSS-атак создавать интерактивные веб-страницы.

Javascript не имеет никакого отношения к языку Java. Javascript имеет к Java такое же отношение, как морская свинка к свинье!

Особенности языка

Является языком с мерзкой прототипной объектной моделью.[1] В Javascript используется делегирование, что дает возможность в ходе выполнения программы полностью поменять поведение клонированных от прототипа объектов добавить, например, новые методы для клонированных объектов.

Javascript — язык, где даже функции являются объектами пруф, даже объекты являются функциями

В общем, JavaScript — это такой дзенский язык программирования, в котором все — объекты, и нет никакой разницы между хэшем и объектом, между объектом и классом, между свойством и методом, между методом и обычной функцией...

Дмитрий Котеров

Javascript поддерживает замыкания, что дает утечку памяти[2][3] возможность плодить функции, которые будут работать с разными переменными, которые эти функции будут видеть как глобальные (пример ниже).

В Javascript 0.1 + 0.2 == 0.30000000000000004, так-то.

Примеры кода

<script>
//создаём класс, который является функцией
function Obj () {
	this.id = 5;
}
Obj.prototype.id_pr = 3;
var obj1 = new Obj();
var obj2 = new Obj();
obj1.id = 3;
Obj.prototype.id_pr = 4;
alert( ['obj1.id=', obj1.id,
	'\nobj2.id=', obj2.id, 
	'\nobj1.id_pr=', obj1.id_pr, 
	'\nobj2.id_pr=', obj2.id_pr].join('') );
</script>

На что браузер скажет:

«

obj1.id = 3
obj2.id = 5
obj1.id_pr = 4
obj2.id_pr = 4

»
Косая Горящая Лиса

Через прототипы можно добавить новую функцию или метод к уже существующим классам[2]

Array.prototype.newFunc = function () { 
   return this.join(':');
}

Тем самым мы убили возможность использовать цикл for in, добавили к каждому массиву функцию newFunc, возвращающую строчку, состоящую из списка элементов, разделённых двоеточиями.

//Замыкания
function test(i) {
	var i = i;
	return function () {
		return i * i;
	}
}
 
var a = test(2);
var b = test(3);
alert('a() = ' + a() + '\nb() = ' + b());
 
//Спасаемся от утечек памяти, смотри [1] и [2]
onunload = function () {
   a = null;
   b = null;
}

На что браузер скажет:

«

a() = 4
b() = 9

»
Лучший в мире браузер отображатель страниц

Разное

Таблица сравнений Javascript

В Javascript есть значения true, false, null, undefined, Nan, Infinity, что очень удобно ведь приходится смотреть в таблицу сравнений (рисунок справа).

Сценарии на javascript можно запускать, набрав в адресной строке браузера javascript:<некий код> (наверное поэтому, некоторые считают javascript протоколом :-)[3]), это даёт возможность украсть куки, проверить значения некоторых глобальных переменных и вызвать определенные функции (хотя для этих целей удобно использовать плагин "Execute JS" для Firefox`а), а также использовать в коде web-страницы ссылки типа

<a href="javascript: alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>

вместо ущербных

<a href="#" onclick="alert( 'НЕ ДОВИ НА МЕНЯ!' );">ссылка</a>

Примечания

  1. Однако в 2.0 версии обещают нам, что будет всё в ажуре[1]
  2. Вообще-то в javascript классов нет, есть только объекты, например глобальный объект Array, но для простоты я буду называть эти глобальные объекты классами
  3. http://forum.antichat.ru/thread13949.html