gpt4 book ai didi

javascript - 在不使用 Array 的情况下在 JavaScript 中实现类似 Array 的行为

转载 作者:可可西里 更新时间:2023-11-01 01:20:39 26 4
gpt4 key购买 nike

有没有什么方法可以在不使用内置数组的情况下在 JavaScript 中创建类数组对象?我特别关注这样的行为:

var sup = new Array(5);
//sup.length here is 0
sup[0] = 'z3ero';
//sup.length here is 1
sup[1] = 'o3ne';
//sup.length here is 2
sup[4] = 'f3our';
//sup.length here is 5

我在这里看到的特殊行为是 sup.length 在没有调用任何方法的情况下发生变化。 我从 this question 了解到[] 运算符在数组的情况下被重载,这说明了这种行为。是否有纯 JavaScript 方法来复制此行为,或者语言不够灵活?

根据Mozilla docs ,正则表达式返回的值也用这个索引做时髦的事情。这可以用普通的 javascript 实现吗?

最佳答案

[] 运算符是访问对象属性的 native 方式。它在语言中不可重写以更改其行为。

如果您想要在 [] 运算符上返回计算值,则不能在 JavaScript 中执行此操作,因为该语言不支持计算属性的概念。唯一的解决方案是使用与 [] 运算符相同的方法。

MyClass.prototype.getItem = function(index)
{
return {
name: 'Item' + index,
value: 2 * index
};
}

如果您想要的是与您的类中的 native 数组具有相同的行为,则始终可以直接在您的类上使用 native 数组方法。在内部,您的类将像 native 数组一样存储数据,但会保持其类状态。 jQuery 这样做是为了使 jQuery 类具有数组行为,同时保留其方法。

MyClass.prototype.addItem = function(item)
{
// Will add "item" in "this" as if it was a native array
// it will then be accessible using the [] operator
Array.prototype.push.call(this, item);
}

关于javascript - 在不使用 Array 的情况下在 JavaScript 中实现类似 Array 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366031/

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