我怎样才能返回一个看起来像一个节点插件数组的东西?

我正在为节点实现本地模块,并试图返回看起来像一个数组,但由本机数据支持的东西。 目前我创build一个ObjectTemplate和使用SetIndexedPropertyHandler,所以我可以处理尝试从JS获取索引。 这一切工作,但从JS这看起来像一个对象,而不是一个数组。 有什么办法可以让这看起来更像一个数组?

你可以返回Object.entries(object)

Object.entries()方法以与for...in循环提供的顺序相同的顺序返回给定对象自己的可枚举属性[key, value]对的数组(不同之处在于for-in循环枚举原型链中的属性也是如此)。

 const obj = {a:1, b:2, c:3}; console.log(Object.entries(obj)); 

所有的arrays对象都必须有length 。 只要他们有这个属性,你可以借用Array函数并在你的对象上运行它们(例如Array.prototype.forEach.call(obj, ...) ),或者在ES6上运行Array.from

 obj = { 0: "foo", 1: "bar", length: 2 }; // ES5 way to get a real array: console.log(Array.prototype.slice.call(obj)); // ES6 way to get a real array: console.log(Array.from(obj)); 

您可以考虑在真实数组周围使用代理服务器 ,并使用陷阱/处理程序与本地对象进行交互。 使用代理有一个性能损失(如果它是一个重要的热代码path,不要尝试遍历代理数组),但是它们可以让你做任何事情。

 var _arr = []; var arraylike = new Proxy(_arr, { get: function (target, prop) { // Interface with your native object here. if (prop === "length") return 20; return "hello"; } }); // Consume > arraylike.length 20 > arraylike[5] "hello" > arraylike instanceof Array true > Array.isArray(arraylike) true 

在javascript中原型inheritanceArray也是完全有效的。