有人知道
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"
};
test
添加一个名为“foo”的属性,其值是一个函数。在这种情况下,对象test
实际上是一个函数并不重要,你可以像在JavaScript中的任何其他对象一样给函数分配属性。test[name]()
test["foo"]()
test.foo()
name
分配给其他内容(例如name ='bar'
),则test[name]()
将无法正常工作。console.log()
中的表示方式取决于如何实现 toString()
函数。要将函数打印为对象,可以使用 console.log(Object.prototype.toString.apply(test))
。编辑: 实际上这取决于浏览器,看起来 Chrome 和 Firefox 不会在对象的 console.log()
中使用 toString()
,不太确定如何在这种情况下记录函数像对象一样。 - Andrew Clarkfunction 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!"
test[name] = function () {}
将一个匿名函数赋值给test
对象上的name
属性(它本身是一个函数)。在这种情况下(如注释中所述),变量name
被用于访问该属性。name
不是一个字符串。 - xanatosname
是一个变量,不是一个字符串。 - gen_Eric当你有一个具有定义属性的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
对象(如果没有test
对象,将会出现错误)。然后访问从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']
等等……
方括号是在JavaScript对象中通过键引用属性的方式。