const escapeKeycode = 27;
const enterKeycode = 13;
// лексическое окружение это все переменные
// которые доступны в момент создания функции
const lexEnv = 42
const lexEnv2 = 32
const lexEnv3 = 16
const lexEnv4 = 4
// создаём функцию
function fn() {
console.log([
lexEnv, // эта переменная взята из окружения
this,
this.field + lexEnv
])
}
const obj1 = {
field: 8,
myFn: fn
}
obj1.myFn() // здесь this становится равен obj1, this.field === 8
// пример другого this
let obj2 = {
field: 100
}
obj2.myFn2 = obj1.myFn
// если мы использовать функцию как метод другого объекта
obj2.myFn2() // здесь this становится равен obj2, this.field === 100
function getListIdx(str, substr) {
let listIdx = []
let lastIndex = -1
while ((lastIndex = str.indexOf(substr, lastIndex + 1)) !== -1) {
listIdx.push(lastIndex)
}
return listIdx
}
getListIdx('abc bca abcabc cba', 'abc') // [ 0, 8, 11 ]
class Human {
constructor(name) {
this.name = name
}
sayHelloWorld() {
console.log(this.name + ' says: Hello, World!')
}
sayHelloBob() {
console.log(this.name + ' says: Hello, Bob!')
}
sayHelloAlice() {
console.log(this.name + ' says: Hello, Alice!')
}
}
class Human {
constructor(name) {
this.name = name
}
sayHello(name) {
console.log(`${this.name} says: Hello, ${name}!`)
}
sayHelloWorld() {
this.sayHello('World')
}
sayHelloBob() {
this.sayHello('Bob')
}
sayHelloAlice() {
this.sayHello('Alice')
}
}
function parse(input) {
const result = []
let i = 0;
while (true) {
let j
if (input[i] === '"') {
j = input.indexOf('"', i + 1) + 1
} else {
j = input.indexOf(';', i)
}
if (j === -1) {
result.push(input.slice(i))
break
}
result.push(input.slice(i, j))
i = j + 1
}
return result.map(s => s[0] === '"' ? s.slice(1, -1) : s)
}
const input = 'aaaaaa;bbbbb;;;ccccc;"dddd;eeee";ffff;"gggg;;hhhh";jjjj'
console.log(parse(input))