オブジェクトのキーとしてjavascript関数を使用することは完全に有効ですか?オブジェクトのキーとしてjavascript関数を持つことは完全に有効ですか?
以下の作品が、私はわからないんだけどそれは100%(ECMAまたは任意の体はこれを支配する)に準拠し
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj[f]);
オブジェクトのキーとしてjavascript関数を使用することは完全に有効ですか?オブジェクトのキーとしてjavascript関数を持つことは完全に有効ですか?
以下の作品が、私はわからないんだけどそれは100%(ECMAまたは任意の体はこれを支配する)に準拠し
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj[f]);
オブジェクトキー以来のことを行うにはゼロ理由が、ありますECMAscriptではは文字列(当分の間は、ECMAscript 262 edition 3と5、仕様別)である可能性があります。我々はまた、オブジェクト(私は関数参照についてはよく分からない)することができWeakMapsとオブジェクトキーを持っていますどこ
物事は、ECMAスクリプト6にただし変更されます。
ブラウザがオブジェクトのキーをファンクションリファレンスで区別できる場合でも、疑いのある振る舞い、おそらく実験的であり、今すぐ使用すべきではありません。
動作しているように見えますが、期待通りに動作しない可能性があります。キーとして使用する場合
関数は、文字列にキャストされていますので、
var f = function(a) { return a; };
var obj = {};
obj[f] = 'abc';
console.log(JSON.stringify(obj));
//"{"function (a) { return a; }":"abc"}"
console.log(f.toString());
//"function (a) { return a; }"
var f2 = function (a) { return a; };
console.log(obj[f2]);
//"abc"
、関数fとf2は異なるオブジェクトですが、文字列にキャストするとき、彼らは同じです。
'f'と' f2'が基本的なコードが同じであるため同じ動作をするのであれば、しばしば問題にはなりません。 –
閉鎖されている可能性があります。それらは同じソースコードを持ち、同じ外部関数によって生成されるかもしれませんが、クロージャの異なる値にバインドされます。だから、彼らは**違ったふうに動作しますが、同じように見えます。 – SWilk
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj['function(){\r\n\r\n}']);
私は非常に興味深いことに、このケースを見ています。 –
私はそれが意味がないと言うでしょう。この関数は、toStringを使用して、[["function(){...}"] ' – mplungjan
のキーを作成し、パブ/サブシステム内の匿名サブスクライバ関数の追跡/登録解除を維持する可能性があります。しかし、これが正しいデータ構造であることは確かではありません。 –