js 像数组一样使用对象
Array.prototype.push 可以在一个对象上工作。 注意,我们没有创建一个数组来存储对象的集合。
相反,我们将该集合存储在对象本身上,并使用在 Array.prototype.push 上使用的 call
来调用该方法,使其认为我们正在处理数组,而它只是像平常一样运作,
这要感谢 JavaScript 允许我们建立任意的执行上下文。
var obj = { length: 0, addElem: function addElem (elem) { // obj.length is automatically incremented // every time an element is added. [].push.call(this, elem); } }; // Let's add some empty objects just to illustrate. obj.addElem({}); obj.addElem({}); console.log(obj.length); // → 2
注意,尽管 obj 不是数组,但是 push 方法成功地使 obj 的 length 属性增长了,就像我们处理一个实际的数组一样。
obj = { '0': {}, '1': {}, length: 2, addElem: [Function: addElem] }