自定义 Array 的构造函数,还是使用自定义构造函数创建新的数组对象?



我正在尝试获得一个带有一组随机预定义值的数组。

假设我有一个值的正则数组

var Seed = ['1', true, 3, 'false', 'five']

我想把这些变量作为种子,每次都会返回一个随机版本

var randomized = new Seed();
console.log(randomized);
// 3, 'five', 1, true, 'false'

或者类似的东西。但每次。。。

randomized = new Seed();
console.log(randomized);
// 'five', true, 'false', 1, 3

我甚至有一个很好的函数来实际随机化数组,但是,我的数组(种子)必须与它的随机化代码一起封装在数据库模块中,这样我就可以有一种干净的new ArrayClass()方法来做到这一点。

我不确定,但似乎如果我可以自定义数组对象的构造函数,我可以在那里插入随机化代码和种子数组,并让它每次都输出一个新的随机化数组。

再说一遍,我不确定这是否可能,但我已经尝试了很多像这样的东西

Seed.prototype.Seed = function(){
// cannot set property Seed of undefined
}
Seed.constructor = function(){
// never gets called
}

我以为这样的事情可能会奏效,但我想我不知道自己在做什么。请澄清。

这个问题的根源似乎是"我能给数组下一个子类吗?">

您可以:

function MyArray() {
this.push("myArray");
}
MyArray.prototype = Object.create(Array.prototype);
var a = new MyArray(); // defaults to ["myArray"]
a instanceof MyArray // true
a instanceof Array // true

关于这在这个问题的背景下是否是一个好主意,这可能是一个辩论的主题。取决于用例。

如果你只想随机化一些值,那么我同意@Xotic750在评论中的观点。只需创建一个函数来返回一个正则数组。

如果您想在不影响本机实现的情况下扩展Array类的功能,那么对Array进行子类化是个好主意。再说一遍,有一个很好的例子可以直接扩展Array原型:

Array.prototype.myCustomFunction = function() {
...
};
var a = [...];
a.myCustomFunction();

最新更新