[英]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');
人们可以将对象视为关联数组(也就是地图,字典,散列,查找表)。 此数组中的键是对象成员的名称
有两种方法可以访问对象成员:点表示法和括号表示法(也就是下标运算符)。
所以
test[name] = function (
意思是:有(如果一切正常)两个对象: test
和name
(我们知道至少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.