3

誰が何をtest[name]意味するのか知っていますか?

function test(value){
  copy(value||{},this);
}
test[name] = function(){
    return "test"
}
4

7 に答える 7

6

これは、例を使用して説明するのが最も簡単です。

var name = "foo";
test[name] = function(){
    return "test"
};

これにより、「foo」という名前のプロパティが objecttestに追加され、そのプロパティの値は関数になります。この場合、オブジェクトtestが実際に関数であることは問題ではありません。JavaScript の他のオブジェクトと同じように、プロパティを関数に割り当てることができます。

次のいずれかの方法を使用して、この関数を呼び出すことができます。

  • test[name]()
  • test["foo"]()
  • test.foo()

変数が別のものに割り当てられているtest[name]()場合は機能しないことに注意してください。namename = 'bar'

于 2013-08-14T15:15:13.633 に答える
1

Javascript には、オブジェクトにアクセスするための 2 つの表記法があります。ドット表記法 (obj.property) とブラケット表記法 (object[property]) です。詳細についてはMDNを参照してください。

test[name] = function (){}nameオブジェクトのプロパティに無名関数を割り当てtestます (それ自体が関数です)。この場合 (コメントで指摘されているように)、変数nameはプロパティへのアクセスに使用されています。

最初は少し奇妙に思えるかもしれませんが、javascript では関数はオブジェクトであることを覚えておくと役に立ちます。

于 2013-08-14T15:11:51.633 に答える
0

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');

于 2013-08-14T15:13:47.833 に答える
0

Mozillaページから取得

オブジェクトを連想配列 (別名マップ、辞書、ハッシュ、ルックアップ テーブル) と考えることができます。この配列のキーは、オブジェクト メンバーの名前です。

オブジェクト メンバーにアクセスするには、ドット表記とブラケット表記 (別名添え字演算子) の 2 つの方法があります。

そう

test[name] = function (

意味: (すべて問題なければ) 2 つのオブジェクト: testand (そして、1 行前に定義したので、name少なくとも存在することがわかります: )testfunction 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']

等々...

于 2013-08-14T15:20:36.230 に答える
-1

角かっこは、キーを介してプロパティを参照し、JavaScript オブジェクトであるハッシュに入れる方法です。

于 2013-08-14T15:09:01.850 に答える