在 JavaScript 中,function 和 array 也是 object,所以它们也可以当成 object 来使用。例如:
var fun = function(){}; fun.key = "dog"; var arr = new Array(); arr.key = "cat"; console.log(fun.key); // dog console.log(arr.key); // cat
类似地,我们也可以用 function 和 object 当成 array 来使用,例如:
var fun = function(){}; fun[1] = "dog"; fun[2] = "cat"; var obj = new Object(); obj[1] = "dog"; obj[2] = "cat"; console.log(fun[1]); // dog console.log(obj[2]); // cat console.log(fun.length); // 0 console.log(obj.length); // undefined
注意此时 array 的各种方法和属性都是没有的,比如 length。上面例子中 fun.length 之所以为 0,是因为 Function.length 指的是函数的参数个数。这个属性不能修改,所以用 function 模拟 array 时需要改用别的属性名比如 len 等。
这样的用法当然很奇怪,所以一般情形不要用它。
参考资料:
[1] Associative Arrays in JavaScript – There’s None!
[2] Object as JavaScript object’s Key
[3] jshashtable #usage
[4] Function.length - JavaScript | MDN
[5] Function.name - JavaScript | MDN