正如我们所知,我们可以使用带有参数功能的数组原型方法,如下所示。
function abc() {
// As 'arguments' is a array like object which don't have Array prototype functions.
Array.prototype.push.call(arguments, 30);
console.log(arguments);
}
abc(10, 20); // Output is: [10, 20, 30]
所以我明智地尝试使用推送DOM元素 classList ,如下所示,这给了我一个错误"无法设置[object Object]的属性长度,它只有一个getter"
var bodyClassList = document.body.classList;
Array.prototype.push.call(bodyClassList, 'myClass');
注意:我刚刚尝试学习概念,这就是为什么我使用push,即使它内置了 add()方法。
所以我的问题是:
我们可以在哪些对象上使用Array.prototype方法?
提前致谢。
答案 0 :(得分:2)
Array.prototype
方法是非常通用的方法,适用于所有类型的对象。他们只是获取和设置索引属性以及调用它们的对象的.length
。 (并且,对于ES6,如果需要创建新实例,则为.constructor
个实例的Array
属性。您可以check the spec查看push
的具体内容。
所以基本上,回答你的问题......
我们可以在哪些对象上使用Array.prototype方法?
...在所有对象上。也就是说,在操作它们时不会抛出异常的对象。请注意,push
本身不会抛出错误。
一些例子:
var x = {0:0, length:1};
Array.prototype.push.call(x, 1);
console.log(x); // {0:0, 1:1, length:2}
console.log(Array.prototype.slice.call(x)); // [0, 1]
var y = {0:0, get length() { throw new Error("boo!"); }}
Array.prototype.push.call(y, 1); // throws
var z = {get 0() { throw new Error("boo!"); }, length: 1};
Array.prototype.push.call(z, 1);
console.log(z); // {0:…, 1:1, length:2}
console.log(Array.prototype.slice.call(z)); // throws
arguments
对象与x
非常相似。 classList
与y
非常相似。