İşlev parametre listelerinin içindeki küme parantezleri es6'da ne işe yarar?


Yanıtlar:


118

Bu edilir kurucuların , ancak parametreler dahilinde içeriyordu. Yıkım olmadan eşdeğer:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

12
Sadece doğru anladığımdan emin olmak için, temelde bu, bu özellikleri içeren bir nesnenin işleve aktarılacağı ve ardından işlev içinde özelliklere yalnızca adları kullanılarak otomatik olarak erişilebileceği anlamına gelir.
Nathan

7
@Nathan Evet, özellikle Nesne yok etme ile ilgili bölüme bakın . Bununla birlikte, değişkenlerde yapılan güncellemelerin orijinal nesne özelliklerini güncellemeyeceğini unutmayın - bu, orijinal değere bir referans oluşturmak gibi değildir.
James Thorpe


11

Bu, bir nesneyi bir özellik olarak iletmektir.

Temelde kısaltmasıdır

let param1 = someObject.param1
let param2 = someObject.param2

Bu tekniği parametreler olmadan kullanmanın başka bir yolu şudur, bir saniye için someObject'in bu özellikleri içerdiğini düşünelim.

let {param1, param2} = someObject;

3

Nesne yıkıcı bir görevdir. Benim gibi, bunu şaşırtıcı bulmuş olabilirsiniz çünkü ES6 nesnesi yıkıcı sözdizimi gibi görünüyor, ancak nesne değişmez yapısı gibi davranmıyor.

Karşılaştığınız çok kısa formu ve alanları ve varsayılan bağımsız değişkenleri yeniden adlandırmayı destekler:

Esasen, {oldkeyname: newkeyname = defaultvalue, ...}. ':' anahtar / değer ayırıcısı DEĞİLDİR; '=' dir.

Bu dil tasarım kararının bazı yan etkileri, aşağıdaki gibi şeyler yapmanız gerekebileceğidir.

({A, b} = some_object);

Ekstra parantezler, sol küme parantezlerinin bir blok olarak ayrıştırılmasını engeller ve baştaki noktalı virgül, parenlerin önceki satırdaki bir işleve yönelik bir işlev çağrısı olarak ayrıştırılmasını engeller.

Daha fazla bilgi için bkz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

Dikkat edin, nesne yok etme ataması sırasında önemli hatalar ATILMAZ; İster önemli bir hata, ister sessizce "tanımsız" olarak yayılan başka bir hata olsun, "tanımlanmamış" değerlerle sonuçlanırsınız.

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
> 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.