15

次のJavaScriptの例を考えてみましょう。

var myobj = {   func1: function() { alert(name in this) },
                func2: function() { alert(name in this) },
                func3: function() { alert(name in this) }
}

myobj.func2(); // returns true
myobj.func4(); // undefined function

フォーマットを保持しながらmyobj(のように)キー/関数が定義されていない場合に呼び出される「catch-all」キーを作成することは可能ですか?func4()myobj.functionCall()

4

2 に答える 2

30

プロキシとゲッター関数を使用して、「ワイルドカード」または「キャッチオール」キーを使用してJavaScriptオブジェクトを作成できます。提供されるソリューションとは異なり、プロキシはNode.jsを含むほぼすべての環境で機能するはずです。

var foo = new Object()

var specialFoo = new Proxy(foo, {
    get(target,name) {
        // do something here
        return name
    }
})

console.log(specialFoo.blabla) // this will output "blabla"

プロパティを呼び出し可能にする場合は、関数を返すだけです。

var specialFoo = new Proxy(foo, {
    get(target,name) {
        return function() {
            console.log('derp')
            return name
        }
    }
})


specialFoo.callMe() // this will print derp

詳細:Mozillaに関するドキュメント

于 2016-05-25T20:26:42.417 に答える
16

あなたが探しているのは__noSuchMethod__
すべてのプロパティのJavaScriptゲッター

于 2010-03-01T17:25:43.887 に答える