Bagaimana untuk Meniru noSuchMethod Tahap Harta dalam JavaScript?

DDD
Lepaskan: 2024-10-18 14:29:03
asal
569 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan