Чтобы ответить на ваш вопрос о том, как вы можете это сделать, вы можете получить entrySet с вашей карты, а затем просто поместить в новую карту, используя getValue как key
и getKey как value
.
Но помните, что ключи на карте Map уникальны, что означает, что если у вас есть одно значение с двумя разными ключами на исходной карте, то только второй ключ (в порядке итерации) будет быть кеп как значение на новой карте.
Область выполнения задания - это глобальная область действия, поэтому this
не foo
. Можно подумать, что это исправило бы это:
var foo = { f1: () => 5, f2: foo.f1() }
, но это не так, потому что в то время, когда литерал строит объект, присваивания не было, а foo
undefined
.
Вам нужно учитывать время и записать одно из следующего:
var foo = { f1: () => 5 }
foo.f2 = foo.f1
или
var f = () => 5
var foo = { f1: f, f2: f }
Конечно , если вы хотите просто разрешить f1
во время выполнения и не хотите явно ссылаться на функцию с круглыми скобками, вы все равно можете использовать функцию в качестве getter:
var foo = { f1: () => 5, get f2() { return foo.f1 } }
foo.f2
# => [Function: f1]
Этот ответ, вероятно, полезен:
Как "& quot; этот & quot; ключевое слово в действии Javascript внутри литерала объекта?
В этом ответе также есть полезные комментарии к разнице между стрелками и регулярными функциями, в частности, как влияет на this
:
Функции стрелок vs Функции стрелочной стрелки
var testOne = {
a: 'hello',
b: () => console.log(this.a)
}
var testTwo = {}
testTwo.a = 'hello'
testTwo.b = function() {console.log(this.a)}
console.log(testOne.a)
testOne.b()
console.log(testTwo.a)
testTwo.b()