String() のプロトタイプで定義したメソッドで変数名を取得するにはどうすればよいですか?
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
「s」を含むアラートを返す必要があります...
どうすればこれを管理できますか?
よろしく。
編集:
String() のプロトタイプで定義したメソッドで変数名を取得するにはどうすればよいですか?
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
「s」を含むアラートを返す必要があります...
どうすればこれを管理できますか?
よろしく。
編集:
「文字列が変更されたかどうかをチェックするようなカスタム イベントを作成したい」
それ無理。文字列は不変です。
また、関数に実際の変数名を警告させたい場合も、それは不可能です。String オブジェクトがある場合、同じオブジェクトを参照する複数の変数が存在する可能性があります。使用する名前をどのように知るのでしょうか?
必要なことを行うオブジェクトを定義する必要があります。できればセッターとゲッターを使用してください。
文字列を参照する変数への変更が通知されるようにするには、次のようにします。
var str_obj = (function() {
var s = "my string";
return {
getString: function() {
return s;
},
setString: function( new_s ) {
s = new_s;
alert("s changed!");
}
};
})();
alert( str_obj.getString() ); // alerts "my string"
str_obj.setString( "new string" ); // alerts "s changed!"
alert( str_obj.getString() ); // alerts "new string"
これは不可能です。そして、そうである必要はありません。
このメタデータを本当に知りたい場合は、オブジェクトの使用を検討する必要があります。
var obj = {
s: "I'm just a stupid string!"
};
for(var x in obj){
alert(x + '=' + obj[x]); // logs: s=I'm just a stupid string!
}
しかし、なぜ変数名をプログラムで知りたいのでしょうか?
Javascript には、文字列プリミティブ (真の JavaScript オブジェクトではありません) と、メソッドを持つ文字列オブジェクトがあります。文字列プリミティブはより効率的であり、あなたのような静的に宣言された文字列はデフォルトでプリミティブになると思います。ほとんどの場合、JavaScript は必要に応じてプリミティブをオブジェクトに自動的に変換します。コードを Chrome で実行すると、実行され、アラートが表示されます。
オブジェクトであることを確認したい場合は、次のように宣言できます。
String.prototype.foobar = function() {alert("fun");};
var s = new String("I'm just a stupid string!");
s.foobar();
このトピックの詳細については、こちらの「文字列プリミティブと文字列オブジェクトの違い」セクションを参照してください。
あなたがしようとしているのが foobar() メソッドから変数名を取得することである場合、それは Javascript が標準的な方法でサポートするものではありません。
これらのどちらも実際に求めているものでない場合は、質問を明確にしてください。
まあ、これは実際に動作します。
そのスニペットを次のように変更した場合:
String.prototype.foobar = function() {alert(this);};
その後、s.foobar();
警告します"I'm just a stupid string!"
それがうまくいかない場合は、テストしているエンジンを教えてください。
残念ながら、元の変数名を取得する方法はありません。