AngularJs разрушает $ местоположение - PullRequest
2 голосов
/ 20 июня 2019

Вместо использования:

const ref = $location.protocol() + '://' + $location.host();

я пытаюсь сделать это так:

const { protocol, host } = $location;
const ref = protocol() + '://' + host();

, но, похоже, это не работает.(protocol () ничего не возвращает, то же самое для host ()) Однако, если я попробую что-то вроде этого:

const loc = {
    protocol: function(){
        return 'http';
    },
    host: function(){
        return 'example.com';
    },
};

const { protocol, host } = loc;

document.write(protocol() + '://' + host());

, это сработает.Любая идея, почему?

Ps.Некоторый пример здесь , просто раскомментируйте вторую строку, и он больше не будет работать.

1 Ответ

2 голосов
/ 20 июня 2019

Синтаксис назначения деструктурирования - это выражение JavaScript, позволяющее распаковывать значения из массивов или свойств из объектов в отдельные переменные.

Вы теряете ссылку на это, когда деметоды структуры $location.protocol и protocol относятся к разным this

let a = {
  myName : 'my name',
  nameLogger(){
    return this.myName
  }
}

let {nameLogger} = a

console.log( 'Hello ' + nameLogger())

nameLogger = nameLogger.bind(a)

console.log( 'Hello ' + nameLogger())
...