首頁 > web前端 > js教程 > 主體

如何在 JavaScript 中使用代理實作屬性的無此類方法行為?

Patricia Arquette
發布: 2024-10-18 14:22:02
原創
758 人瀏覽過

How to Implement No Such Method Behavior for Properties using Proxies in JavaScript?

為屬性實作基於代理的noSuchMethod

JavaScript 中的noSuchMethod 功能允許攔截對不存在方法。但是,是否有類似的屬性機制?

ES6 代理來救援

ES6 代理提供了自訂屬性存取的能力。我們可以利用它來模擬屬性的類似__noSuchMethod__ 的行為:

<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>
登入後複製

範例實作

這裡是使用代理來實作可以處理未知屬性的「Dummy」類別的範例:

<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}`);
};

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

用法

  • __ownProp1__:記錄現有屬性值。
  • __test__:觸發定義的方法。
  • someName(1, 2)__:使用參數呼叫不存在的方法,該方法由 __noSuchMethod 鉤子處理。
  • __xyz(3, 4)__:與上方類似,但示範了非- 還可以處理函數屬性。
  • __doesNotExist("a", "b")__:使用提供的參數記錄不存在方法/屬性。

以上是如何在 JavaScript 中使用代理實作屬性的無此類方法行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板