在mdn上看到的一段:像数组一样使用对象
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
我想知道这种情况有什么实际的使用场合吗?
常用的场景是为一个非数组的引用对象插入值,比如:
此外:
call , apply, bind 等方法使用的场景之一就是通过改变this指向,借用原型链上的一些方法