Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var MyClass = function(){
this.a = 0;
return {
add: function(){
this.a++;
}
}
}
var test = new MyClass ();
test.add();
var MyClass = function(){
var self = this;
self.a = 0;
return {
add: function(){
self.a++;
}
}
}
var test = new MyClass ();
test.add();
if (getEngine() == 'webkit') {
i += 1;
} else if (getEngine() == 'trident') {
i++;
} else if (getEngine() == 'gecko') {
++i;
}
кривоватый дизайн JavaScriptон не кривой, а другой. Функции имеют лексическую область видимости, а this — это спец переменная контекста вызова функции как и arguments, которая просто называется this и путает многих. Достаточно это понять
Используя данный паттерн, this привязывается к global object. Это, несомненно, является ошибкой языка — постоянная привязка this к глобальному объекту может уничтожить его контекст.
функции являются объектами первого класса
var fn = function() {
alert(1);
};
new fn.prototype.constructor;
// fn.prototype.constructor();
если функция возвращает число, цепочку, логическое выражение (true/false), null или undefined, return не сработает, a мы получим thisСтроку, надеюсь?
К сожалению, существует несколько паттернов для вызова функций. О них не нужно быть в курсе. Их нужно зазубрить и понять...Ломает мозг.
Я рад сообщить, что начиная с версии 1.8.5 JavaScript, Object.create является вполне работающим инструментом.
Четыре паттерна вызова функций в JavaScript