Anasayfa » Kodlama » JavaScript'teki Alıcı ve Ayarlayıcılara İlişkin Temel Kılavuz

    JavaScript'teki Alıcı ve Ayarlayıcılara İlişkin Temel Kılavuz

    alıcılar ve belirleyiciler kullanılan işlevler veya yöntemler almak ve set değişkenlerin değerleri. Alıcı-belirleyici kavramı bilgisayar programlamasında ortak: hemen hemen tüm yüksek seviye programlama dilleri, JavaScipt dahil, alıcı ve ayarlayıcıları uygulamak için bir dizi sözdizimiyle gelir..

    Bu yayında alıcıların belirleyicilerinin ne olduğunu ve nasıl yapıldığını göreceğiz. oluştur ve bunları JavaScript'te kullan.

    Alıcılar-belirleyiciler ve kapsülleme

    Alıcıların ve belirleyicilerin fikrinden her zaman söz edilir. kapsülleme ile birlikte. Kapsülleme olabilir iki şekilde anlaşıldı.

    Birincisi, bu Veri-alıcılar belirleyiciler bu verilere erişmek ve bunları değiştirmek için trio. Bu tanım, doğrulama gibi bazı işlemlerin yapılması gerektiğinde faydalıdır. veri üzerinde gerçekleştirilen kaydetmeden veya görüntülemeden önce alıcılar ve ayarlayıcılar bunun için mükemmel bir yer sağlar.

    İkincisi, enkapsülasyonun yapıldığı duruma göre daha katı bir tanım vardır. veri gizle, diğer kodlardan erişilemez duruma getirmek için, alıcılar ve ayarlayıcılar hariç. Bu şekilde bitmeyiz yanlışlıkla önemli verilerin üzerine yazmak programdaki başka bir kodla.

    Alıcıları ve ayarlayıcıları oluştur

    1. Yöntemlerle

    Alıcılar ve ayarlayıcılar temelde fonksiyonlar Bir değer alma / değiştirme, var birden fazla yol onları oluşturmak ve kullanmak için. İlk yol:

     var obj = foo: 'bu foo'nun değeridir', getFoo: function () return this.foo; , setFoo: function (val) this.foo = val;  console.log (obj.getFoo ()); // "bu foo'nun değeridir" obj.setFoo ('hello'); console.log (obj.getFoo ()); // "Merhaba"

    Bu en basit yol alıcılar ve ayarlayıcılar oluşturmak için. Bir özellik var foo ve iki yöntem var: getFoo ve setFoo için dönüş ve bir değer atama o mülke.

    2. Anahtar kelimelerle

    Daha fazla “resmi” alıcıları ve ayarlayıcıları oluşturmanın sağlam ve sağlam yolunu kullanmaktır. almak ve set anahtar kelimeler.

    için Bir alıcı oluşturmak, yerleştir almak anahtar kelime alıcı yöntemi olarak hizmet verecek bir işlev bildiriminin önünde set anahtar kelime aynı şekilde ayarlayıcı oluştur. Sözdizimi aşağıdaki gibidir:

     var obj = fooVal: 'bu foo'nun değeridir', get foo () return this.fooVal; , set foo (val) this.fooVal = val;  console.log (obj.foo); // "bu foo'nun değeridir" obj.foo = 'hello'; console.log (obj.foo); // "Merhaba" 

    Verilerin yalnızca mülkiyet adı altında saklanır (fooVal) bu farklı alıcı-belirleyici yöntemlerin adından (foo) çünkü alıcı ayarlayıcıyı tutan bir özellik veriyi tutamıyorum yanı sıra.

    Hangi yol daha iyi?

    Anahtar kelimelerle alıcılar ve ayarlayıcılar oluşturmayı seçerseniz, Verileri ayarlamak için ve nokta operatörünü veri almak için, normal bir mülkün değerine erişme / değeri ayarladığınız gibi.

    Bununla birlikte, kodlayıcı alıcı ve ayarlayıcıların ilk yolunu seçerseniz ayarlayıcı ve alıcı yöntemlerini çağırmanız gerekir. işlev çağrısı sözdizimini kullanarak çünkü bunlar tipik fonksiyonlardır ( almak ve set anahtar kelimeler).

    Ayrıca, kazayla sonuçlanma ihtimalin var. başka bir değer vermek alıcı-belirleyici yöntemleri barındıran özelliklere ve onları tamamen kaybet! Daha sonraki yöntemde endişelenmeniz gerekmeyen bir şey.

    Yani, neden söylediğimi anlayabilirsin. ikinci teknik daha sağlam.

    Üzerine yazma önleme

    Herhangi bir nedenden dolayı ilk tekniği tercih ediyorsanız, getter-setter yöntemlerini tutan özellikleri yapın. Sadece oku onları oluşturarak kullanma Object.defineProperties. Üzerinden oluşturulan mülkler Object.defineProperties, Object.defineProperty ve Reflect.defineProperty otomatik olarak yapılandır için yazılabilir: yanlış bu demektir ki Sadece oku:

     / * Üzerine yazma önleme * / var obj = foo: 'bu foo'nun değeridir'; Object.defineProperties (obj, 'getFoo':: value: function () return this.foo;, 'setFoo': value: function (val) this.foo = val;); obj.getFoo = 66; // getFoo'nun üzerine yazılmayacak! console.log (obj.getFoo ()); // "bu foo'nun değeridir" 

    Alıcıların ve ayarlayıcıların içindeki işlemler

    Alıcıları ve ayarlayıcıları tanıttıktan sonra, devam edebilir ve veri üzerinde işlem yapmak değiştirmeden veya iade etmeden önce.

    Aşağıdaki kodda, alıcı fonksiyonunda veriler bir dize ile birleştirilmiş iade edilmeden önce ve ayarlayıcı işlevinde değerin bir sayı olup olmadığı güncellemeden önce gerçekleştirilir n.

     var obj = n: 67, get id () return 'Kimlik:' + this.n; , kimliği (val) ayarlayın if (typeof val === 'sayı') this.n = val;  console.log (obj.id); // "Kimlik: 67" obj.id = 893; console.log (obj.id); // "Kimlik: 893" obj.id = 'merhaba'; console.log (obj.id); // "Kimlik: 893" 

    Alıcılarla ve ayarlayıcılarla verileri koruyun

    Şimdiye kadar, ilk kapsülleme bağlamında alıcıların ve ayarlayıcıların kullanımını ele aldık. İkinciye geçelim, yani nasıl dış koddaki verileri gizle alıcıların ve ayarlayıcıların yardımıyla.

    Korunmasız veri

    Alıcıların ve ayarlayıcıların ayarlanması, verilere yalnızca bu yöntemlerle erişilip değiştirilebileceği anlamına gelmez. Aşağıdaki örnekte, bu doğrudan değişti alıcı ve ayarlayıcı yöntemlerine dokunmadan:

     var obj = fooVal: 'bu foo'nun değeridir', get foo () return this.fooVal; , set foo (val) this.fooVal = val;  obj.fooVal = 'merhaba'; console.log (obj.foo); // "Merhaba" 

    Setleyiciyi kullanmadık ama doğrudan verileri değiştirdi (fooVal). İlk başta koyduğumuz veriler obj şimdi gitti! Bunun olmasını önlemek için (yanlışlıkla), biraz korumaya ihtiyacım var Verileriniz için Bunu ekleyebilirsiniz kapsamı sınırlamak verilerinizin bulunduğu yerin Bunu da yapabilirsiniz blok kapsamı veya fonksiyon kapsamı.

    1. Blok kapsamı

    Bir yol için blok kapsamı kullan verileri kullanarak tanımlanacak let anahtar kelime hangisi kapsamını sınırlar o bloğa.

    bir blok kapsamı kodunuzu koyarak oluşturulabilir bir çift kaşlı ayraç içinde. Ne zaman bir blok kapsam oluşturursanız olun yorum Yap yukarıda, parantezlerin yalnız bırakılmasını istemek, böylece kimse ayraçları kaldırır yanlışlıkla kodda bazı fazladan parantezler olduğunu düşünerek etiket ekle blok kapsamına.

     / * BLOCK SCOPE, parantezleri rahat bırakın! * / let fooVal = 'bu, foo'nun değeridir'; var obj = get foo () return fooVal; , foo (val) değerini ayarlayın fooVal = val fooVal = 'merhaba'; // blok içindeki fooVal'ı etkilemeyecek console.log (obj.foo); // "bu foo'nun değeridir"

    Değiştirme / oluşturma fooValbloğun dışında etkilemeyecek fooVal alıcılar ayarlayıcılar içinde anılır.

    2. İşlev kapsamı

    Kapsam belirleme ile verileri korumanın en yaygın yolu verileri bir fonksiyon içinde tutmak ve nesne döndürmek Bu fonksiyondan alıcılar ve ayarlayıcılar.

     function myobj () var fooVal = 'bu, foo'nun değeridir'; return get foo () return fooVal; , foo (val) değerini ayarlayın fooVal = val fooVal = 'merhaba'; // asıl fooVal'ımızı etkilemeyecek var obj = myobj (); console.log (obj.foo); // "bu foo'nun değeridir"

    Nesne (ile fan () içindeki alıcı-alıcı myObj () işlevi kaydedildi obj, ve sonra obj için kullanılır alıcıyı ve alıcıyı ara.

    3. Kapsamsız veri koruması

    Verilerinizi üzerine yazmaktan korumanın başka bir yolu da var. kapsamını sınırlamadan. Arkasındaki mantık şöyle gider: Ne denir bilmiyorsanız, bir veri parçasını nasıl değiştirebilirsiniz?

    Veri varsa Kolayca tekrarlanamaz değişken / özellik adı, Olasılıklar kimse değildir (kendimiz bile), bu değişkene / özellik adına bir değer atayarak bunun üzerine yazmak zorunda kalmaz..

     var obj = s89274934764: 'bu, foo'nun değeridir', get foo () return this.s89274934764; , foo (val) olarak ayarlayın this.s89274934764 = val;  console.log (obj.foo); // "bu foo'nun değeridir" 

    Gördün mü, bu işlerin bir yolu. Seçtiğim isim gerçekten iyi olmasa da, rastgele değerler veya semboller kullanın Bu blog yazısında Derick Bailey tarafından önerilen mülk isimleri oluşturmak için. Ana amaç verileri gizli tut Diğer koddan ve alıcı ayarlayıcı çiftinin ona erişmesi / güncellenmesi için izin verin.

    Alıcı ve ayarlayıcıları ne zaman kullanmalısınız?

    Şimdi büyük soru geliyor: alıcıları ve alıcıları atamaya başlıyor musunuz? tüm verilerinize şimdi?

    Eğer öyleysen veri gizleme, o zaman var başka çare yok.

    Ancak, verileriniz başka bir kodla görülüyorsa, alıcı ayarlayıcılarını kullanmanız gerekiyor mu? sadece kodla paketlemek için Bu bazı işlemler gerçekleştirir? diyecektim ki Evet. kod çok yakında ekler. Kendi alıcı-ayarlayıcı ile bireysel veri mikro birimleri oluşturmak size belirli bir bağımsızlık sağlar Kodun diğer kısımlarını etkilemeden söz konusu veriler üzerinde çalışmak.