向数组添加类实例后遍历无效果,求可行遍历方法及问题解决
问题分析与解决方案
先看你代码里的核心问题:
- 构造函数里的
pushing函数只是定义了,从来没被执行过,所以数组a里没有任何元素,自然遍历也不会有输出。 - 就算调用了
pushing,里面的递归调用pushing()会触发无限循环,直接导致栈溢出。 - 普通函数
pushing里的this默认指向全局对象(浏览器里是window,Node环境是global),不是类实例,直接用会出错。
先修正代码,把实例正确推入数组
要把类实例推入数组,根本不需要写内部函数,两种简单方式:
方法1:构造函数内直接推入
let a = [] class PushArray { constructor(first, second) { this.first = first; this.second = second; // 这里的this就是当前类实例,直接推入数组 a.push(this); } } const result = new PushArray('fdsfs', 'fdsfdsf');
方法2:实例化后手动推入(更灵活)
let a = [] class PushArray { constructor(first, second) { this.first = first; this.second = second; } } const result = new PushArray('fdsfs', 'fdsfdsf'); a.push(result); // 手动把实例加入数组
遍历类实例数组的常用方法
数组里有实例后,下面几种方法都能正常遍历:
1. 普通for循环
for (let i = 0; i < a.length; i++) { console.log(a[i].first, a[i].second); }
2. forEach遍历
a.forEach(instance => { console.log(instance.first, instance.second); });
3. for...of循环(ES6+)
for (const instance of a) { console.log(instance.first, instance.second); }
4. map遍历(适合转换实例数据)
const instanceInfo = a.map(instance => `${instance.first} - ${instance.second}`); console.log(instanceInfo);
运行修正后的代码,就能正常输出实例的属性内容了。
内容的提问来源于stack exchange,提问作者Osama
相关产品推荐
相关产品推荐

