ES6 プロキシは JavaScript のプロパティの noSuchMethod 機能をエミュレートできますか?

Linda Hamilton
リリース: 2024-10-18 14:19:03
オリジナル
987 人が閲覧しました

Can ES6 Proxies Emulate the noSuchMethod Feature for Properties in JavaScript?

ES6 プロキシを使用した JavaScript のプロパティの noSuchMethod のエミュレーション

noSuchMethod 機能により、特定の JavaScript 実装で存在しないメソッドにアクセスするときのカスタム動作を実装します。 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>
ログイン後にコピー

Usage

例:

<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); // value1
instance.test(); // Test called
instance.someName(1, 2); // No such method someName called with [1, 2]
instance.xyz(3, 4); // No such method xyz called with [3, 4]
instance.doesNotExist("a", "b"); // No such method doesNotExist called with ["a", "b"]</code>
ログイン後にコピー

この例は、プロキシがプロパティ アクセスをインターセプトし、存在しない場合は noSuchMethod 実装に委任して、明示的に定義されていないプロパティのカスタム動作を有効にすることを示しています。

以上がES6 プロキシは JavaScript のプロパティの noSuchMethod 機能をエミュレートできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!