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"
};

这将向 object 添加一个名为“foo”的属性test,并且该属性的值是一个函数。test在这种情况下,对象实际上是一个函数并不重要,您可以像 JavaScript 中的任何其他对象一样为函数分配属性。

您可以使用以下任何方法调用此函数:

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

请注意,test[name]()如果将name变量分配给不同的东西,例如name = 'bar'.

于 2013-08-14T15:15:13.633 回答
1

Javascript 有两组用于访问对象的表示法,点表示法 (obj.property) 和括号表示法 (object[property])。更多关于MDN的内容。

test[name] = function (){}将匿名函数分配给对象name上的test属性(它本身就是一个函数)。在这种情况下(如注释所述),该变量name用于访问该属性。

起初这可能看起来有点奇怪,但记住在 javascript 中,函数是对象是有帮助的。

于 2013-08-14T15:11:51.633 回答
1

Javascript 中的所有函数也是对象。这会向test函数对象添加一个属性,其值为匿名函数。

例如:

function test(){
  return "foo";
}

// test is a function, so it is also an object and 
// it can have properties assigned to it
test.x = function(){
   return "bar";
};

test();   // "foo"
test.x(); // "bar"

当然,就像任何对象一样,您也可以使用括号表示法

var name = 'hello';
test[name] = function(){
  return "HELLO!";
};

test.hello(); // "HELLO!"
于 2013-08-14T15:13:31.853 回答
0

在 JavaScript 中,函数是对象。他们有属性。 test[name]将属性(命名为name变量所包含的任何内容)设置为函数。

于 2013-08-14T15:13:04.627 回答
0

当您有一个具有已定义属性的 javascript 对象时,您可以使用点符号obj.property或方括号符号访问该属性,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 页面

可以将对象视为关联数组(又名映射、字典、哈希、查找表)。此数组中的键是对象成员的名称

有两种访问对象成员的方法:点表示法和方括号表示法(又名下标运算符)。

所以

test[name] = function (

意味着:有(如果一切正常)两个对象:testname(我们知道至少test存在,因为您之前定义了一行function test(value):)

获取test对象(如果没有测试object,则会发生错误)。然后使用从对象计算的键访问键/值对name并放置一个函数。

现在,如何从name对象计算密钥?之前的同一页告诉我们:

属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象,包括数字,都通过 toString 方法类型转换为字符串。

请注意,描述有点错误......test[null] == test["null"]并且test[undefined] == test["undefined"],所以也许事实是在幕后完成了类似String(key).valueOf()的事情(该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 回答