誰が何をtest[name]
意味するのか知っていますか?
function test(value){
copy(value||{},this);
}
test[name] = function(){
return "test"
}
誰が何をtest[name]
意味するのか知っていますか?
function test(value){
copy(value||{},this);
}
test[name] = function(){
return "test"
}
これは、例を使用して説明するのが最も簡単です。
var name = "foo";
test[name] = function(){
return "test"
};
これにより、「foo」という名前のプロパティが objecttest
に追加され、そのプロパティの値は関数になります。この場合、オブジェクトtest
が実際に関数であることは問題ではありません。JavaScript の他のオブジェクトと同じように、プロパティを関数に割り当てることができます。
次のいずれかの方法を使用して、この関数を呼び出すことができます。
test[name]()
test["foo"]()
test.foo()
変数が別のものに割り当てられているtest[name]()
場合は機能しないことに注意してください。name
name = 'bar'
Javascript には、オブジェクトにアクセスするための 2 つの表記法があります。ドット表記法 (obj.property) とブラケット表記法 (object[property]) です。詳細についてはMDNを参照してください。
test[name] = function (){}
name
オブジェクトのプロパティに無名関数を割り当てtest
ます (それ自体が関数です)。この場合 (コメントで指摘されているように)、変数name
はプロパティへのアクセスに使用されています。
最初は少し奇妙に思えるかもしれませんが、javascript では関数はオブジェクトであることを覚えておくと役に立ちます。
obj.property
プロパティが定義されたJavaScriptオブジェクトがある場合、ドット表記または角括弧表記のいずれかを使用してプロパティにアクセスできます。プロパティobj[property]
は関数でもある可能性があるため、オブジェクトがある場合:
var test = {
foo : function(arg){ console.log(arg) },
bar : 'hello'
};
これは、繰り返しの場合や、プロパティの名前がどうなるかアプリオリtest.foo('bar')
にtest['foo']('bar')
わからない場合に特に便利です。例えば:
var fun = 'foo';
test[fun]('hello world');
当然のことながら、次のような適切なチェックを行うのはあなた次第です
if ('function'==typeof test['foo']){ test['foo']('bar'); }
また、次のようにオンザフライでチェックを実行できることにも注意してください。
test[ fun || 'foo']('hello');
Mozillaページから取得
オブジェクトを連想配列 (別名マップ、辞書、ハッシュ、ルックアップ テーブル) と考えることができます。この配列のキーは、オブジェクト メンバーの名前です。
オブジェクト メンバーにアクセスするには、ドット表記とブラケット表記 (別名添え字演算子) の 2 つの方法があります。
そう
test[name] = function (
意味: (すべて問題なければ) 2 つのオブジェクト: test
and (そして、1 行前に定義したので、name
少なくとも存在することがわかります: )test
function test(value)
オブジェクトを取得しtest
ます (テストがない場合object
、エラーが発生します)。name
次に、オブジェクトから計算されたキーを使用してキーと値のペアにアクセスし、そこに関数を配置します。
では、キーはname
オブジェクトからどのように計算されるのでしょうか? 前の同じページには次のように書かれています。
プロパティ名は文字列でなければなりません。これは、非文字列オブジェクトをオブジェクトのキーとして使用できないことを意味します。数値を含む非文字列オブジェクトは、toString メソッドを介して文字列に型キャストされます。
説明が少し間違っていることに注意してください... test[null] == test["null"]
and test[undefined] == test["undefined"]
、おそらく真実は、カバーの下で次のようなことString(key).valueOf()
が行われていることです(関数はandにString
変換null
されます)"null"
undefined
"undefined"
いくつかの例 (ここで => は「この値と同等」を意味します)
var name = 'foo';
test[name] => test['foo']
var name = 123;
test[name] => test['123']
var name = 123.3;
test[name] => test['123.3']
var name = new Date();
test[name] => test['Wed Aug 14 2013 17:35:35 GMT+0200 (...)']
var name = null;
test[name] => test['null']
var name = undefined;
test[name] => test['undefined']
var name = [];
test[name] => test['']
var name = [1,2,3];
test[name] => test['1,2,3']
var name = {};
test[name] => test['object Object']
等々...
角かっこは、キーを介してプロパティを参照し、JavaScript オブジェクトであるハッシュに入れる方法です。