2015-09-02 14 views
9

utworzonego obiektu proxy z „Zastosuj” pułapkę:nie można ustawić „Zastosuj” pułapka na Proxy sprzeciw

var target = {}, 
    handler = { apply:() => 42 } 
    proxy = new Proxy(target, handler); 

Dlatego przedmiotem Pełnomocnictwo powinno być wpłacone. Jednak nie działa:

proxy(); // TypeError: proxy is not a function 

Dlaczego?

+0

być może związane: [Tworzenie obiektu (nie) wymienialne] (http://stackoverflow.com/q/29680473/1048572) – Bergi

Odpowiedz

19

Według definicji [[Call]] internal method of Proxy objects powinno działać:

Jednak istnieje pewien problem: nie wszystkie obiekty proxy mają [[połączeń]] Metoda:

Proxy egzotyczne wynikowego posiada [[CALL]] Metoda wewnętrzne, jeżeli początkowa wartość jego [[ProxyTarget]] internal slot jest obiektem , który ma wewnętrzną metodę [[Call]].

Dlatego, to target musi być obiektem funkcji:

var target =() => {}, 
    handler = { apply:() => 42 } 
    proxy = new Proxy(target, handler); 
proxy(); // 42 

Należy zauważyć, że określone target wykorzystaniem funkcji strzałką w celu wytworzenia przedmiotu funkcja, która nie jest konstruktor. W ten sposób można wywoływać obiekt Proxy, ale nie tworzyć instancji.

Jeśli chcesz dodać pułapkę "konstruuj", cel musi mieć również metodę [[Construct]], więc zdefiniuj ją za pomocą deklaracji funkcji lub wyrażenia funkcji.