プロトタイプのデフォルトのゲッターを指定するにはどうすればよいですか? デフォルトのゲッターとは、呼び出された場合に呼び出される関数を意味しますobj.undefinedProperty123
。
Object.prototype.get = function(property) {..} を試してみましたが、この場合は呼び出されません。
プロトタイプのデフォルトのゲッターを指定するにはどうすればよいですか? デフォルトのゲッターとは、呼び出された場合に呼び出される関数を意味しますobj.undefinedProperty123
。
Object.prototype.get = function(property) {..} を試してみましたが、この場合は呼び出されません。
ECMAScript 5 では、特定の名前付きプロパティ (普遍的にすべてのプロパティではない) に対する get/set 操作のみを次の方法でインターセプトできますObject.defineProperty
。
Object.defineProperty(someObj, "someProp", {
get: function() {
console.log("you tried to get someObj.someProp");
return "foo";
}
});
ここでは、get
コードが を読み取ろうとするたびに関数が実行されますsomeObj.someProp
。
今後の ECMAScript 6 ドラフトでは、これはプロキシ経由で可能になります。プロキシには、基礎となるターゲット オブジェクトと set/get 関数があります。プロキシのプロパティのいずれかで set または get 操作が発生すると、適切な関数が実行され、プロキシのターゲット オブジェクト、使用されるプロパティ名、およびset
試行で使用される値が引数として取られます。
var proxyHandler = {
get: function(obj, name){
console.log("you're getting property " + name);
return target[name];
},
set: function(obj, name, value) {
console.log("you're setting property " + name);
target[name] = value;
}
}
var underlyingObj = {};
// use prox instead of underlyingObj to use get/set interceptor functions
var prox = new Proxy(underlyingObj, proxyHandler);
ここで、プロパティ値を取得するように設定するprox
と、set
/get
関数が実行されます。
ガレスが言ったこと、それ以外は__noSuchMethod__
.
それとも、PHP のことを考えていたのでしょうか。
これは、最近標準化されたプロパティの getter/setter に関する非常に優れた記事で、以前の非標準の具体化を強調しています。
要約: 標準の「すべてをキャッチする」getter/setter は (まだ) ありませんが、Object.defineProperty は将来のものです。
まさにこれを行うように設計された ECMA6「プロキシ」システムの実装を待つ必要があります。http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxiesを参照してください。
Firefox では非標準の noSuchMethod で可能です:-
({__noSuchMethod__:function(){alert(1);}}).a();
あなたが何を求めているのかわかりません。ただし、ユーザーがAccessを試行したときにメソッドが呼び出されるようにする場合object.nonExistingProperty
。私はそれをする方法はないと思います。