Как получить доступ к глобальной переменной в функции, используя Javascript? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть сомнения, когда я пытался получить доступ к глобальной переменной в двух функциях. Одна функция - функция стрелки, другая функция - нормальная функция. Функция стрелки работает нормально, но обычная функция не может печатать глобальную переменную. Почему?

Пример кода

class Data1{

    constructor(m1){
        this.m1 = m1
    }
}

class Data2 extends Data1{

    func1(){
        console.log(this.m1)
        this.m1 = 20
    }
    func2=()=>{
        console.log(this.m1)
        this.m1 = 40
    }


}

d1 = new Data1(10)
d2 = new Data2()
d2.func1()
d2.func2()

Выход

undefined  
20
  • В чем разница между обычной функцией объема и функция объема стрелки?
  • Как получить доступ к глобальной функции внутри нормальной функции?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

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

В функциях со стрелками ключевое слово this всегда представляет объект, который определил Функция стрелки.

Если вы напишите конструктор в Data1 и свяжете func1 с объектом Data1, он будет работать. Например,

constructor(){
    this.func1 = this.func1.bind(this);
}
1 голос
/ 28 февраля 2020

В строке:

d2 = new Data2()

Вы вызываете конструктор Data1 без каких-либо аргументов. m1 будет неопределенным. Вам нужно будет передать аргумент конструктору Data1. Это будет сделано автоматически путем передачи аргумента в Data2.

d2 = new Data2(10);

Это должно решить вашу проблему.

Результат не связан с объемом функций (функции-стрелки), даже не это связывание.

...