var MyWebSocket = function(url) {
this.url = url;
this.connection = this.connect(); // 2
Object.defineProperty(this, 'onopen', { // 4
set: function(cb) {
this.connection.then(cb.bind(this)); // 5
}
});
}
MyWebSocket.prototype.connect = function() {
console.log('connecting to %s', this.url);
return new Promise(function(resolve, reject) { // 3
setTimeout(resolve, 2000); // 6
});
}
var socket = new MyWebSocket('example.com:8081'); // 1
socket.onopen = function() {
console.log('connection to %s established', this.url); // 7
}
// Определения функций
function tmp (num) {
var prime = num != 1;
for (var i = 2; i < num; i++) {
if (num % i == 0) {
prime = false;
break;
}
}
console.log('0isPrime');
return prime;
}
tmp.memoized = function(key) {
console.log('memoized');
this._values = this._values || {};
return this._values[key] !== undefined ?
this._values[key] :
this._values[key] = this.apply(null, arguments);
};
tmp.memoize = function() {
console.log('memoize');
var fn = this;
return function() {
return fn.memoized.apply(fn, arguments);
};
};
// Определения переменных
var isPrime, isSeventeenPrime;
// Непосредственно код
console.log('0');
console.log('1');
console.log('2');
isPrime = tmp.memoize(); // console.log('memoize')
console.log('3');
isSeventeenPrime = isPrime(17); // console.log('memoized'), console.log('0isPrime')
console.log(isSeventeenPrime); // console.log(true)
console.log('4');
Шаблон Адаптер позволяет в процессе проектирования не принимать во внимание возможные различия в интерфейсах уже существующих классов. Если есть класс, обладающий требуемыми методами и свойствами (по крайней мере, концептуально), то при необходимости всегда можно воспользоваться шаблоном Адаптер для приведения его интерфейса к нужному виду.
Call to a member function getTitle() on a non-object
form.serialize()+'&mas', // здесь мне нужно добавить массив правильно ли я сделал ?Нет, вы сделали неправильно. Всё, что вы сделали - это добавили get-параметр с именем mas без значения. Вам нужно в цикле сконкатенировать корректный get-параметр. Как он должен выглядеть я вам показал в предыдущем вопросе.
class Entity implements FirstInterface, SecondInterface
form.serialize() + '&foo[]=bar&foo[]=baz&some_more'
interface I {}
class A {}
class B extends A implements I {}
var y = this["book" + i];
Стрелочные функции не имеют собственного объекта arguments, поэтому в теле стрелочных функций arguments будет ссылаться на переменную в окружающей области.
В большинстве случаев лучшей заменой объекта arguments в стрелочных функциях являются rest параметры.