Size: a a a

JavaScript — русскоговорящее сообщество

2020 October 21

in JavaScript — русскоговорящее сообщество
Unknown T.
То есть этот код эквивалентен коду выше, где прототип?
class Test {
   getVal() {
       return 22;
   }
   checkMethod() {...}
}
Нет, тут у тебя checkMethod не стрелочная функция.
источник

in JavaScript — русскоговорящее сообщество
У нее динамический, не привязанный контекст.
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
То есть этот код эквивалентен коду выше, где прототип?
class Test {
   getVal() {
       return 22;
   }
   checkMethod() {...}
}
Здесь ты можешь сделать Test.prototype.checkMethod.call(someObject)
источник

in JavaScript — русскоговорящее сообщество
Чтобы было то, чего ты хотел добиться, когда оно "не работает", ты писать должен как-то так
class Test {
   getVal() {
       return 22;
   }
}

Test.prototype.checkMethod = () => {
       console.log(this.getVal());
   }
А здесь так не сможешь.
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
Вот если ты сделаешь вот так, например, то поведение тоже будет, такое, какое ты хотел изначально
let m = () => {
       console.log(this.getVal());
   }
class Test {
   getVal() {
       return 22;
   }

   checkMethod = m
}
А здесь почему this не привязан? Это преобразуется в такой код:
let m = () => {
   console.log(this.getVal());
}
class Test {
   getVal() {
       return 22;
   }
   constructor(){
      this.checkMethod = m;
   }
}

Одно и то же с тем, что выше, в котором this привязывался...
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
А здесь почему this не привязан? Это преобразуется в такой код:
let m = () => {
   console.log(this.getVal());
}
class Test {
   getVal() {
       return 22;
   }
   constructor(){
      this.checkMethod = m;
   }
}

Одно и то же с тем, что выше, в котором this привязывался...
Нет, не одно и тоже. В прошлом случае ты стрелочную функцию создаешь каждый раз при инициализации объекта - внутри конструктора. Во втором случае ты просто присваиваешь ссылку на одну и ту же функцию каждый раз.
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
А здесь почему this не привязан? Это преобразуется в такой код:
let m = () => {
   console.log(this.getVal());
}
class Test {
   getVal() {
       return 22;
   }
   constructor(){
      this.checkMethod = m;
   }
}

Одно и то же с тем, что выше, в котором this привязывался...
Ты же понимаешь, чем отличается ?

function a(){
     return []
}

от

let x = []

function a(){
     return x
}
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
Да, здесь понимаю
Но пусть одну и ту же присваиваем, что мешает ей к this то обратиться, хоть она везде и одинаковая
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
Да, здесь понимаю
Но пусть одну и ту же присваиваем, что мешает ей к this то обратиться, хоть она везде и одинаковая
Как что мешает. У тебя стрелочная функция. У нее this привязан к тому, который был в лексическом окружении в котором она создана. У нее this статический, раз и на всю ее жизнь.

Используй не стрелочную функцию, и будет как ты хочешь.

let m = function() {
   console.log(this.getVal());
}
class Test {
   getVal() {
       return 22;
   }
   constructor(){
      this.checkMethod = m;
   }
}
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
Когда была создана, вот в чем дело, спасибо!
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
Как что мешает. У тебя стрелочная функция. У нее this привязан к тому, который был в лексическом окружении в котором она создана. У нее this статический, раз и на всю ее жизнь.

Используй не стрелочную функцию, и будет как ты хочешь.

let m = function() {
   console.log(this.getVal());
}
class Test {
   getVal() {
       return 22;
   }
   constructor(){
      this.checkMethod = m;
   }
}
Запустил, тут this тоже undefined, от стрелочной не отличается получается
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
Запустил, тут this тоже undefined, от стрелочной не отличается получается
Как это?
источник

in JavaScript — русскоговорящее сообщество
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
А, ну так да
Я про то, если вызывать, как я изначально писал
let func = new Test().checkMethod;
func();
источник

in JavaScript — русскоговорящее сообщество
Unknown T.
А, ну так да
Я про то, если вызывать, как я изначально писал
let func = new Test().checkMethod;
func();
Так, а что ты пытаешься получить.  У тебя checkMethod с динамическим контекстом.
источник

in JavaScript — русскоговорящее сообщество
Статический контекст только у стрелочных функций, и у тех, которым ты контекст явно привяжешь через bind
источник

UT

Unknown T. in JavaScript — русскоговорящее сообщество
Да-да, я понимаю
Вообще это просто эксперименты, чтобы улучшить понимание механик this и классов
Спасибо большое за советы, много нового узнал )
источник

U

Undisputed in JavaScript — русскоговорящее сообщество
есть кто не спит?
источник

U

Undisputed in JavaScript — русскоговорящее сообщество
https://codepen.io/slamem/pen/PozGRmr?editors=1010 кто может помочь с ползунками?
источник

MB

Morten BB in JavaScript — русскоговорящее сообщество
they're useful for doing common tasks
источник