如何在对象工厂中使用数组并实现元素添加与遍历?
让Player实例的regions支持数组操作的解决方案
要实现像操作数组一样给player_1.regions添加区域、遍历值,核心是把regions属性从单个值改成数组类型,同时兼容原有的传参方式。以下是修改后的代码和用法:
修改后的工厂函数
function player_factory(name, regions) { this.name = name; // 确保regions始终是数组:如果传入数组就浅拷贝,否则包装成数组 this.regions = Array.isArray(regions) ? [...regions] : (regions !== undefined ? [regions] : []); }
用法示例
1. 单个区域初始化并添加新区域
var player_1 = new player_factory('player 1', 'land 1'); // 使用push添加新区域 player_1.regions.push('land 2'); player_1.regions.push('land 3'); // 遍历regions中的值 player_1.regions.forEach(region => { console.log(region); }); // 输出结果: // land 1 // land 2 // land 3
2. 直接传入多个区域初始化
var player_2 = new player_factory('player 2', ['forest 1', 'mountain 1']); // 同样可以push新区域 player_2.regions.push('river 1'); // 用for循环遍历 for (let i = 0; i < player_2.regions.length; i++) { console.log(player_2.regions[i]); } // 输出结果: // forest 1 // mountain 1 // river 1
关键说明
- 原代码中
regions被赋值为单个字符串,无法使用数组的push、遍历方法;修改后强制regions为数组类型,兼容单个值和数组两种传参方式。 - 使用
[...regions]做浅拷贝,避免外部修改传入的数组影响实例内部的regions值。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

