0

'use strict'
class A {
 constructor(){}
 Do(){
  alert(this)
 }
}
let a = new A()
a.Do()
let b = a.Do
b()

Почему во втором вызове выводится undefined?

Alster
  • 427

1 Answers1

3

Потому что используется "use strict"

При использовании "use strict" - this по умолчания - undefined

В первом вызове this - указывает на объект.

Но после получения ссылки на функцию и выполнения

let b = a.Do;
b();

Контекст меняется на глобальный объект, либо, при использовании "use strict" на undefined

Кроме того, в mdn

Тело определения класса, и class expressions выполняются в strict mode.

Grundy
  • 81,538
  • Не понимаю. Ну да, функция вызывается не от имени обьекта, но ведь она является его прототипом. Извините, но в JavaScript я новичок, и это поведение кажется мне крайне странным. – Alster Mar 21 '16 at 18:30
  • @Alster, смиритесь :-) значение this зависит от того как именно вызвали функцию – Grundy Mar 21 '16 at 18:31