async function ITPIsActive() {
if (document.hasStorageAccess && document.requestStorageAccess) {
const access = await new Promise(function(res, rej) {
document.hasStorageAccess().then(res, rej).catch(rej);
});
return access;
} else {
return false;
}
}
const url = `${location.protocol === 'http:' ? 'ws:' : 'wss:'}//${location.host}/`;
var socket;
var connected = false;
typeof WebSocket !== 'undefined' && function connect() {
socket = new WebSocket(url);
socket.onmessage = onMessage;
socket.onopen = () => connected = true;
socket.onerror = err => {
console.error(err);
socket.onclose = null;
connected = false;
socket.close();
connect();
};
socket.onclose = event => {
console.info(`WebSocket closed with code ${event.code}! ${event.reason}`);
connected = false;
if(event.wasClean) return;
connect();
};
}();
function onMessage(event) {
//...
}
function foo() {console.log(this);}
function MyObject() {
this.foo = foo;
}
var hashMap = {
foo: foo
};
var obj = {};
var instance = new MyObject();
obj.bar = instance.foo; // мы можем даже красть методы
foo(); // выведет window, если для браузера и мы вызывали в глобальном контексте
instance.foo(); // выведет instance так как в контексте этого объекта мы это дело и вызывали
hashMap.foo(); // выведет hashMap по той же причине
obj.bar(); // выведет obj опять же потому что мы вызывали функцию в этом контексте
foo.call('my own context') //мы можем задать свой контекст
Зачем присваивается this и используется в дальнейшем?
var input = [
[-1,-3,-2],
[1,3,5],
[2,6,3],
[7,3,3]
];
var result = input.map(a=>a.reduce((a, b)=>Math.max(a, b))) // all magic here
console.log(result) // [-1,5,6,7]
var result = input.map(function(subArray) {
return subArray.reduce(function(prev, current){
return Math.max(prev, current);
})
})
[1,2,3,4,50].reduce((prev, current)=>prev + current)
вернет сумму всех элементов.var x = function (element) {
return element.width
}
превращается в var x = element => element.width
var result = input.map(a=>Math.max.apply(null,a))
В prototype по умолчанию всегда находится свойство constructor, указывающее на функцию-конструктор.
function Rabbit(){}
console.log( Rabbit.prototype.constructor ); //Rabbit
Square.prototype = new Rectangle();
console.log( Square.prototype.constructor ) // Rectangle