簡単に言えば、私は PHP スタイルのゲッターが欲しい状況にいますが、JavaScript です。
私の JavaScript は Firefox でのみ実行されているため、Mozilla 固有の JS は問題ありません。
JS ゲッターを作成する唯一の方法は、その名前を指定する必要がありますが、考えられるすべての名前のゲッターを定義したいと思います。これが可能かどうかはわかりませんが、知りたいです。
簡単に言えば、私は PHP スタイルのゲッターが欲しい状況にいますが、JavaScript です。
私の JavaScript は Firefox でのみ実行されているため、Mozilla 固有の JS は問題ありません。
JS ゲッターを作成する唯一の方法は、その名前を指定する必要がありますが、考えられるすべての名前のゲッターを定義したいと思います。これが可能かどうかはわかりませんが、知りたいです。
Proxy
出来る!これがあると嬉しいです!!答えはここにあります: Python の __getattr__ メソッドに相当する JavaScript はありますか? . 自分の言葉で言い換えると:
var x = new Proxy({}, {
get(target, name) {
return "Its hilarious you think I have " + name
}
})
console.log(x.hair) // logs: "Its hilarious you think I have hair"
勝利のための代理!MDN ドキュメントを確認してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
chrome、firefox、および node.js で動作します。欠点: IE では動作しません - フリーキン IE。後で。
最も近いものは__noSuchMethod__で、これは PHP の __call() に相当する JavaScript です。
残念ながら、__get/__set に相当するものはありません。残念なことに、それらを使用して __noSuchMethod__ を実装できた可能性がありますが、__noSuchMethod__ を使用して (C# のように) プロパティを実装する方法はまだわかりません。
var foo = {
__noSuchMethod__ : function(id, args) {
alert(id);
alert(args);
}
};
foo.bar(1, 2);
機能する実装が本当に必要な場合は、 に対して 2 番目のパラメーターをテストすることで「ごまかす」ことがundefined
できます。これは、実際にパラメーターを設定するために get を使用できることも意味します。
var foo = {
args: {},
__noSuchMethod__ : function(id, args) {
if(args === undefined) {
return this.args[id] === undefined ? this[id] : this.args[id]
}
if(this[id] === undefined) {
this.args[id] = args;
} else {
this[id] = args;
}
}
};
PHP の関数のようなものを探しているのであれば__get()
、Javascript はそのような構造を提供していないと思います。
私が考えることができる最善の方法は、オブジェクトの非関数メンバーをループしてから、それぞれに対応する「getXYZ()」関数を作成することです。
危険な疑似コードで:
for (o in this) {
if (this.hasOwnProperty(o)) {
this['get_' + o] = function() {
// return this.o -- but you'll need to create a closure to
// keep the correct reference to "o"
};
}
}