2015-12-25 9 views
10

W JavaScript można zrobić:Object Dosłowne Własności Wartość Shorthand niezgodne z `this`

var a = {this: this} 

ale z ES6 Skrócona uzyskać SyntaxError:

var b = {this}; // SyntaxError: this is a reserved identifier 

To nie jest realne wykorzystanie ale zastanawiam się, jaka jest różnica między tymi dwoma. Myślałem, że powinno to zrobić to samo (albo utwórz nowy obiekt, albo wyślij błąd).

UPDATE:

uruchomić ten przykład w Firefoksie 42,0. Działa jednak w węźle Babel (tworzy obiekt bez błędu). Jakie jest prawidłowe zachowanie?

+1

Jakie to jest środowisko? Działa dla mnie w węzeł Babel. –

+0

To samo dla mnie, [działa dobrze tutaj] (https://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=true&code=var%20b%20%3D%20%7Bthis%7D%3B%20) – CodingIntrigue

+0

Wydaje się działać w węźle Babel. Zobacz moją aktualizację. – madox2

Odpowiedz

8

Gramatyka dla tej skróconej klauzuli inicjalizującej właściwość określa, że ​​używany termin musi być identyfikatorem Identifier. Ponieważ this jest słowem zarezerwowanym, nie jest to identyfikator, więc pojawia się błąd składni.

Odpowiednią częścią specyfikacji jest section 12.2.6.

+1

Za to, co jest warte, zgadzam się, że fakt, że * można * użyć "tego" jako nazwy własności, ale próba w OP nie powiodła się, to brodawka językowa, ale ty rodzaju - przyzwyczaić się do tych jako programista JavaScript. – Pointy

+0

Jestem zdezorientowany. Po pierwsze, '{this}' działa dla mnie przynajmniej w węźle Babel. Babel kompiluje go do '{" this ": this};', które jest całkowicie legalne. Rozumiem, że '{break}' nie może działać, nawet poprzez 'break' jest dozwolone jako klucz, ponieważ nie może istnieć żaden identyfikator' break'. Ale "to" jest rodzajem specjalnego identyfikatora, przepraszam, jeśli nie mam właściwej terminologii. Czy jest to brodawka językowa, czy też Babel pozwala na to, kiedy nie powinien, czy też jest jakimkolwiek silnikiem/procesorem, którego używa OP, nie pozwalając na to, kiedy powinien? –

Powiązane problemy