2017-01-09 4 views
4

Можно ли получить все, что связано с this, и все закрытые переменные из функции?Как получить связанные `this` и закрытые переменные?

например.

function f() { console.log(this); } 
let x = f.bind(7); 
function g() { console.log(x); } 
  1. Можно ли извлечь что 7 из x?

  2. g закрывает более x. Можно ли получить массив закрытых переменных от g?

+2

Нет, вы не можете (если только поведение функции не раскрывает его, конечно), и вы не можете этого сделать. – Pointy

ответ

9

Можно ли извлечь что 7 из x?

Nope. f должен явно предоставить вам способ получить this (например, function f() { return this; }). Так как это не так, вы не можете.

В спецификациях вы спрашиваете, можно ли получить значение внутреннего слота [[BoundThis]] из функции. [[BoundThis]] появляется только три раза в спецификации: где описаны bound function exotic objects, где описаны их [[Call]] internal operation и где обозначен process of creating them. Таким образом, не в операции, позволяющей получить значение.

g закрывает более x. Можно ли получить массив закрытых переменных от g?

Nope. :-) Это хорошо с точки зрения наличия частной информации и публичного API.

Предоставление для доступа к списку привязок в объекте lexical environment, прикрепленном к g и ко всем его внешним лексическим средам. В спецификации нет.


Там нет спецификации причины один или оба не могут быть добавлены, но я думаю, что (и это только мое личное предположение), что TC39 (комитет, который решает эти вещи) будет трудно продать на первая и почти невозможная продажа на втором (что имеет массовые и негативные последствия реализации).

Смежные вопросы