function getEndpoint(method, url) {
var apiBaseUrl = 'http://server.ser/mobile_app/'
return function(data) {
return $.ajax({
url: apiBaseUrl + url,
type: method,
dataType: 'json',
data: data
})
}
}
var tryLogin = getEndpoint('POST', '/post');
tryLogin({ user: 'Foo', pass: 'bar' })
.done(function(data) {
if (typeof data.success != 'undefined' && data.success == 'ok') {
console.log('try login true');
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log('Ошибка: ' + textStatus + ' | ' + errorThrown);
});
c
, значением которой, устанавливает анонимную функцию. Анонимная функция ожидает в качестве аргумента объект и возвращает так же объект. В случае, если в объекте, переданном в качестве аргумента, есть свойство a
, которое, в свою очередь так же является объектом, и имеет свойство b
, функция c
вернет объект с одним свойством b
и значением, скопированным из одноименного свойства объекта a
. // c :: Object -> Object
console.log( c({ a: { b: 'foo' } }) ) // -> Object {b: "foo"}
{ b: undefined }
makeCounter()
возвращается ссылка на объект фунции, а не на её результат. Так же в данном примере используется замыкание, которое дает возвращаемой функции возможность обращаться к переменной currentCount
, которая нахоится в родительской области видимости.function makeCounter() {
var currentCount = 1;
return function() {
return currentCount++;
};
}
var counter = makeCounter();
var counter1 = makeCounter();
console.log(counter()); //1
console.log(counter()); //2
// счётчики работают независимо друг от друга
console.log(counter1()) //1
makeCounter.foo = "bar"
, абсолютно валидна. Подобный подход используется для создания статических свойств функцииcounter()
find().select(/* объект с полями */)
. По умолчанию mongoose возвращает коллекцию своих обёрток над JS-объектами, которые довольно тяжелые. Получить POJO можно с помощью find().lean()
. Чтобы не ждать, пока вам вернётся вся коллекция из 1500 записей, можно воспользоваться курсорами со стримами и работать с данными пачками. res.send
отправляет все заголовки и тело, что завершает вес процесс запрос-ответ и закрывает возможность использовать текущий объект res
для отправки чего-либо. В данном случае вам нужно убрать из кода первый вызов res.send
и вы получите "Hello 2". Никаих обходов асинхронности, глобальных переменных и прочего вам не нужно. Переменная res будет и так доступна внутри коллбэка, если вы не перекрываете её где-то в области видимости. position: absolute;
, можете указать top:0; right: 0;
, но контейнер, в котором у вас отображаются формы, должен иметь position: relative;
"1 августа 2016 г. 19.00".replace(/\w+г\..*/, '')
trim
, чтобы упростить регулярку:"1 августа 2016 г. 19.00".replace(/г\..*/, '').trim()
...
this.on('showModal', function (data) {
if (!window.modalAttached) {
ReactDOM.render(
<ModalWindow data={data} />,
this.el
)
}
window.toggleModal();
}
...
$
- индентификатор, используемый библиотекой jQuery. Вы не подключили эту библиотеку, либо пытаетесь выполнить код до подключения библиотеки function Vector(x,y) {
this.x = x;
this.y = y;
}
Vector.prototype.plus = function(otherVector) {
var xx = this.x - otherVector.x;
var yy = this.y - otherVector.y;
return 'Vector: x= ' + xx + ' y=' + yy;
};
Vector.prototype.minus = function(otherVector) {
var xx = this.x - otherVector.x;
var yy = this.y - otherVector.y;
return 'Vector: x= ' - xx - ' y=' - yy;
};
console.log(new Vector(1, 2).plus(new Vector(2, 3)));
this
теряется, если ваш метод вызывается не из экземпляра класса, в котором он объявлен. Нужно использовать bind
, чтобы привязать функцию к экземпляру. const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(this.openSlider.bind(this));
}
}
const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(() => this.openSlider());
}
}
.wrapper
висит обработчик 'click'
который обрабатывает как клики по самомму элементу, так и по всем дочерним. Для проверки элемента, инициировавшего событие, используется свойство e.target
, результат выводится в консоль. Данный код должен корректно работать в IE9+ .bind()
, которая сейчас входит в ES7 proposal