Rumah > hujung hadapan web > tutorial js > Bit Pantas JavaScript: Kaedah Dikira

Bit Pantas JavaScript: Kaedah Dikira

Barbara Streisand
Lepaskan: 2024-12-28 20:00:15
asal
520 orang telah melayarinya

JavaScript Quick Bits: Computed Methods

Anda mungkin tahu tentang kunci terkira dalam objek, tetapi adakah anda sedar bahawa anda boleh menggunakan kunci terkira dengan kaedah trengkas? Anda mungkin tidak pernah mahu melakukan ini, tetapi anda boleh.

const methodName = 'myMethod';
const computedKey = 'computed';

const myObj = {
  // Computed Property
  [computedKey]: 'It worked!',

  // ? Is this a good idea? Probably not, no.
  // Computed property + Method shorthand
  [methodName]() {
    return this.computed;
  },
};

myObj.myMethod();
// 'It worked!'
Salin selepas log masuk

Pelajaran Sejarah

Dalam versi JavaScript yang terawal, semua fungsi ditakrifkan dalam skop global. Pada masa itu anda boleh menggunakan kurungan untuk mendapatkan atau menetapkan nilai yang dikira, tetapi kebanyakan keupayaan yang kami fikirkan tidak tersedia.

ECMAScript 3

ECMAScript 3 membawakan kami ungkapan fungsi dan kaedah objek. Anda boleh menggunakan notasi kurungan untuk menetapkan sifat atau kaedah.

// Old JavaScript.
var computedKey = 'computed';

var myObj = {
  // Key and function separately.
  myMethod: function () {
    return this.computed;
  },
};

myObj[computedKey] = 'It worked!';

myObj.myMethod();
// 'It worked!'
Salin selepas log masuk

Adalah kemungkinan untuk mempunyai nama kaedah dinamik jika anda mahu tetapi ia perlu ditakrifkan selepas objek dibuat.

myObj = {};
myObj[methodName] = function() {
  return this.computed;
};
Salin selepas log masuk

ECMAScript 2015

ECMAScript 2015 memperkenalkan kedua-dua kaedah objek trengkas dan sifat dikira.

// Exciting new JavaScript!
const computedKey = 'computed';

const myObj = {
  // Method shorthand
  myMethod() {
    return this.computed;
  },
  // Computed Property
  [computedKey]: 'It worked!',
};

myObj.myMethod();
// 'It worked!'
Salin selepas log masuk

Walaupun artikel MDN tidak menyebutnya secara khusus, anda boleh menggabungkan trengkas kaedah dengan nama sifat yang dikira, seperti yang ditunjukkan pada permulaan artikel.

Masalah

Mungkin terdapat beberapa kes kelebihan yang masuk akal untuk melakukan ini, tetapi secara umum kita harus mengelakkan teknik ini. Ia menjadikannya sangat sukar untuk mencari kaedah apabila cuba memahami kod dan mengurangkan keberkesanan sokongan editor kod seperti IntelliSense dan maklumat taip.

Alternatif

Cincang atau proksi boleh menjadi alternatif yang baik kepada nama kaedah yang dikira. Lihat beberapa cara kami boleh membuat ini berfungsi dan beritahu saya yang mana yang anda rasa paling sesuai untuk anda!

Kod Biasa

const methodName = 'myMethod';
const computedKey = 'computed';

const myObj = {
  getComputed() {
    return this.computed;
  },
  [computedKey]: 'It worked!',
};
Salin selepas log masuk

Pemetaan Biasa

Peta rentetan ringkas untuk memadankan nama kaedah memerlukan persediaan yang sangat sedikit tetapi menjadikannya lebih sukar untuk memanggil kaedah.

const methodMap = {
  [methodName]: 'getComputed',
};

myObj[methodMap.myMethod]();
// 'It worked!';
Salin selepas log masuk

Pemetaan Terikat

Menggunakan objek dengan kaedah terikat pada objek asal memerlukan lebih banyak persediaan tetapi memudahkan kod untuk pengguna.

const methodMapBound = {
  [methodName]: myObj.getComputed.bind(myObj),
};

methodMapBound.myMethod();
// 'It worked!'
Salin selepas log masuk

Proksi Asas

Objek Proksi menghapuskan kebanyakan komplikasi, kerana anda boleh berinteraksi secara langsung dengan proksi. Ini menggunakan semakan statik dalam pengambil untuk mencari harta pengiraan kami.

const basicProxy = new Proxy(myObj, {
  get(target, prop, receiver) {
    if (prop === methodName) {
      return myObj.getComputed;
    }
    return Reflect.get(...arguments);
  },
});

basicProxy.myMethod();
// 'It worked!'
Salin selepas log masuk

Peta Proksi Plus

Menggunakan peta nama sifat a dalam contoh Pemetaan Biasa, kami boleh menyokong sebarang bilangan pemetaan kaedah. Jika kami bersedia menerima sedikit risiko gelung tak terhingga, kami sebenarnya boleh menyokong pelbagai arah!

const methodMap = {
  [methodName]: 'getComputed',
  'thisIsWild': methodName,
};

const methodProxy = new Proxy(myObj, {
  get(target, prop, receiver) {
    if (methodMap[prop]) {
      // Using receiver allows multiple indirection
      return receiver[methodMap[prop]];
    }
    return Reflect.get(...arguments);
  },
});

methodProxy.myMethod();
// 'It worked!'

methodProxy.thisIsWild();
// 'It worked!'
Salin selepas log masuk

Kesimpulan

Saya harap anda menikmati pengembaraan ringkas ini ke beberapa keupayaan JavaScript yang tidak dijangka dan (mudah-mudahan) yang tidak digunakan!

Atas ialah kandungan terperinci Bit Pantas JavaScript: Kaedah Dikira. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan