繁体   English   中英

括号的功能是什么意思?

[英]What is function with brackets mean?

有谁知道什么是test[name]是什么意思?

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

用一个例子来解释这个问题最简单:

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

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

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

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

请注意,如果将name变量分配给不同的name ,则test[name]()将不起作用,例如name = 'bar'

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

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

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

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!"

在JavaScript中, 函数是对象 他们有财产。 test[name]为函数设置一个属性(命名为变量name )。

当你有一个具有已定义属性的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');

取自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(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']

等等...

括号是如何通过键将属性引用到javascript对象的哈希值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM