Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Meniru noSuchMethod Tahap Harta dalam JavaScript?

Bagaimana untuk Meniru noSuchMethod Tahap Harta dalam JavaScript?

DDD
DDDasal
2024-10-18 14:29:03570semak imbas

How to Emulate Property-Level noSuchMethod in JavaScript?

Mencontohi Tahap Harta noSuchMethod dalam JavaScript

Ciri noSuchMethod dalam pelaksanaan JavaScript tertentu, seperti Rhino dan SpiderMonkey , membolehkan pengendalian kaedah yang tidak dilaksanakan. Walau bagaimanapun, ciri serupa tidak tersedia secara asli untuk hartanah.

ECMAScript 6 Proxies to the Rescue

ECMAScript 6 memperkenalkan Proksi, yang menyediakan mekanisme untuk menyesuaikan operasi asas, termasuk akses harta benda. Dengan memanfaatkan perangkap Proksi, kita boleh meniru gelagat yang diingini untuk carian harta menggunakan __noSuchMethod__.

Penyelesaian Menggunakan Proksi ES6

<code class="javascript">function enableNoSuchMethod(obj) {
  return new Proxy(obj, {
    get(target, p) {
      if (p in target) {
        return target[p];
      } else if (typeof target.__noSuchMethod__ == "function") {
        return function(...args) {
          return target.__noSuchMethod__.call(target, p, args);
        };
      }
    }
  });
}</code>

Contoh Penggunaan

Pertimbangkan contoh berikut:

<code class="javascript">function Dummy() {
  this.ownProp1 = "value1";
  return enableNoSuchMethod(this);
}

Dummy.prototype.test = function() {
  console.log("Test called");
};

Dummy.prototype.__noSuchMethod__ = function(name, args) {
  console.log(`No such method ${name} called with ${args}`);
  return;
};

var instance = new Dummy();
console.log(instance.ownProp1);
instance.test();
instance.someName(1, 2);
instance.xyz(3, 4);
instance.doesNotExist("a", "b");</code>

Kod ini akan log keluaran berikut, menunjukkan emulasi noSuchMethod untuk sifat:

value1
Test called
No such method someName called with 1,2
No such method xyz called with 3,4
No such method doesNotExist called with a,b

Atas ialah kandungan terperinci Bagaimana untuk Meniru noSuchMethod Tahap Harta dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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