Javascript - 在创建时对数组元素执行操作[重复]

Posted

技术标签:

【中文标题】Javascript - 在创建时对数组元素执行操作[重复]【英文标题】:Javascript - Performing actions on Array elements on creation [duplicate] 【发布时间】:2016-07-04 04:56:49 【问题描述】:

我正在尝试在 javascript 中创建一个对象/类,它的行为类似于数组,但具有一些附加功能。

我用这些简单的线条实现了这一点:

var Newclass = Array
Newclass.prototype.get_by_id = function()

但是,我只是在调用这个新类时尝试执行一些操作,因此我添加到其中的元素会以特定方式处理(并在需要时进行转换)。

我想知道是否有办法即时制作,所以我可以这样做:

var a = New Newclass('hello', 'goodbye', 'good afternoon')

并自动将变量a 设为(例如):

console.log(a)
["HELLO", "GOODBYE", "GOOD AFTERNOON"]

我知道如何使用循环和数组函数(如 map 等),但我想知道 是否有覆盖构造函数(在此 Newclass)因此它会在创建时自动应用于其所有元素,不会破坏任何内容

编辑

感谢大家的时间和回答。但是,我必须说这不是重复的,因为我不是在问如何使用 arguments(或者它们是否存在),而是如何使用它们来构建一个数组派生 类,我发现完全不同。

即使知道arguments 参数的存在,我仍然不知道如何在Array 的构造函数上处理这些参数并且仍然拥有此类对象的所有本机函数。

【问题讨论】:

但请谨慎使用arguments 对象,因为它正在从标准中删除 那么你要告诉我的是覆盖constructor 方法,获取每个参数并为自己创建一个a.push(argument_transformed) 您不需要push,因为arguments 是一个包含所有传递参数的数组,无论有多少。我认为您不需要重写构造函数,也许您可​​以使用call()bind() 添加正确的范围。抱歉帮了点忙,我现在无法想象另一种方法来完成这项任务 var Newclass = Array 你实际上还没有创建一个新类。 我已经为一个新类创建了基础。在此之后,我可以创建仅适用于 Newclass 的方法,而不是为所有数组设置原型。 【参考方案1】:

您可以制作自己的数组导数:

function uppercaseStringArray()
    Array.call(this);
    for(var i = 0; i < arguments.length; i++) this.push(arguments[i]);

uppercaseStringArray.prototype = Object.create(Array.prototype);
uppercaseStringArray.prototype.push = function(string)
    Array.prototype.push.call(this, string.toUpperCase());

这和你期望的完全一样,它仍然具有普通数组的所有属性:

function uppercaseStringArray()
    Array.call(this);
    for(var i = 0; i < arguments.length; i++) this.push(arguments[i]);

uppercaseStringArray.prototype = Object.create(Array.prototype);
uppercaseStringArray.prototype.push = function(string)
    Array.prototype.push.call(this, string.toUpperCase());


var a  = new uppercaseStringArray('tomato', 'apple', 'pear');

console.log(a);

document.write('[' + a.join(', ') + ']');

您可以修改 push 方法以获取无限量的参数。但是请注意,这不是一个完整的数组,因为a[5] = 'thingy' 不会修改您的数组的长度,所以请务必只使用添加和从您的阵列中删除。

这也使用instanceof 将自己标识为ArrayuppercaseStringArray。您可以将自己的方法添加到数组中,例如原型中的 get_by_id 函数。

【讨论】:

这是目前最好的答案,所以我将其标记为已解决!感谢您的帮助。

以上是关于Javascript - 在创建时对数组元素执行操作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript常用数组方法

如何在更新时对数组进行排序

有重复项时对最左/最右元素进行二分搜索

JavaScript中Map和ForEach的区别

Web 三件套JavaScript 的数组函数和对象

Web 三件套JavaScript 的数组函数和对象