2015-12-25 16 views
10

JavaScript'inizde this` yapmalı:Nesne Değişmez Özellik Değer Shorthand mümkündür

var a = {this: this} 

ama ES6 mülkiyet steno ile alıyorum SyntaxError:

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

Bu gerçek bir kullanım değildir Ama ben sadece bu ikisi arasındaki farkın ne olduğunu merak ediyorum. Aynı şeyi yapması gerektiğini düşündüm (yeni bir nesne oluştur veya hata at).

GÜNCELLEME:

Firefox 42,0 yılında bu örneği çalıştırın. Ancak babel-node'da çalışır (hata olmadan { this: {} } nesnesini oluşturur). Peki doğru davranış nedir?

+1

Bu ortam nedir? Babel düğümünde benim için çalışıyor. –

+0

Benim için aynı, [burada iyi çalışıyor] (https://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=true&code=var%20b%20%3D%20%7Bthis%7D%3B%20 – CodingIntrigue

+0

Babel-düğümde çalışıyor gibi görünüyor. Güncellemeye bakın. – madox2

cevap

8

Bu shorthand özellik başlatıcısı yan tümcesi için kullanılan dilbilgisi, kullanılan tek terimin Tanımlayıcısı olması gerektiğini belirtir. this ayrılmış bir sözcük olduğu için, bir tanımlayıcı değildir, bu nedenle bir sözdizimi hatası alırsınız.

Belirtimin ilgili kısmı section 12.2.6 dur.

+1

Değeri için * bu özelliği bir özellik adı olarak kullanabileceğinizi, ancak OP'deki başarısızlık girişiminin bir dil siğilini oluşturduğuna katılıyorum, ama sizler için bir JavaScript programcısı olarak alışkınsınızdır. – Pointy

+0

Bunun hakkında kafam karıştı. İlk olarak, '' '' '' '' '' en azından babel-düğümde benim için çalışır. Babel bunu '{' this ': this}; Anladığım kadarıyla, '' break '' bir anahtar olarak izin verilir, çünkü 'break' diye bir tanımlayıcı olamaz. Fakat 'bu', terminolojiye tam olarak sahip olmadığım için özür dilerim. Öyleyse, bu bir dil siğilidir, ya da Babel yapmaması gerektiğinde izin verir mi, yoksa OP'nin ne zaman motoru/işlemcisi ne zaman yapması gerektiğine izin vermiyorsa? –

İlgili konular