gpt4 book ai didi

javascript - 对非数组使用数组原型(prototype)函数

转载 作者:行者123 更新时间:2023-11-30 16:12:32 25 4
gpt4 key购买 nike

正如我们所知,我们可以使用带有函数参数的数组原型(prototype)方法,如下所示。

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 上使用推送,如下所示,这给了我一个错误“无法设置只有一个 getter 的 [object Object] 的属性长度”。

var bodyClassList = document.body.classList;
Array.prototype.push.call(bodyClassList, 'myClass');

注意:我刚刚尝试学习概念,这就是我使用 push 的原因,即使它具有内置的 add() 方法。

所以我的问题是:

我们可以在哪些对象上使用 Array.prototype 方法?

提前致谢。

最佳答案

Array.prototype 方法是非常通用的方法,适用于所有类型的对象。它们只是获取和设置索引属性以及调用它们的对象的 .length。 (并且,对于 ES6,Array 实例的 .constructor 属性,如果它们需要创建一个新实例)。你可以check the spec看看 push 到底做了什么。

所以基本上,回答你的问题......

On which objects we can use Array.prototype methods?

…在所有对象上。也就是说,对象在被操作时不会抛出异常。请注意 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 对象非常像xclassList 非常像 y

关于javascript - 对非数组使用数组原型(prototype)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36026931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com