自定义toString()无输出求助:校园项目构造函数属性展示异常
解决自定义toString()无输出及表单存储问题
看起来你卡在toString()不输出和表单数据处理的环节了,我来帮你一步步捋清楚问题、修复代码:
1. 先补全你的Logiciels函数逻辑
你给出的代码片段不完整,ordiConfigure.Logiciels[i...这里明显没写完。首先我们需要把选中的复选框值正确收集到ordiConfigure.Logiciels数组里,而不是直接用索引赋值(复选框的索引和软件名称对应不上)。修改后的函数如下:
function Logiciels(ordiConfigure) { // 先初始化软件数组,避免出现未定义的情况 ordiConfigure.Logiciels = []; // 获取目标表单里的所有input元素 const inputs = document.forms[2].getElementsByTagName("input"); // 跳过首个文本输入框,遍历剩余input for (let i = 1; i < inputs.length; i++) { const input = inputs[i]; // 只处理复选框且处于选中状态的元素 if (input.type === "checkbox" && input.checked) { // 把选中的软件名称(或value值)加入数组 ordiConfigure.Logiciels.push(input.value || input.name); } } }
2. 给构造函数添加自定义toString()方法
toString()无输出大概率是因为你没把它挂载到构造函数的原型上,或者实例没有正确关联这个方法。假设你的构造函数叫OrdiConfigure,按如下方式定义:
// 先定义构造函数,接收配置参数 function OrdiConfigure(cpu, ram, storage) { this.cpu = cpu; this.ram = ram; this.storage = storage; this.Logiciels = []; // 提前初始化软件数组 } // 把自定义toString()挂载到原型上,所有实例都能调用 OrdiConfigure.prototype.toString = function() { let infoStr = "电脑配置详情:\n"; // 遍历实例的所有键值对 for (const key in this) { // 只取实例自身的属性,跳过原型上的方法 if (this.hasOwnProperty(key)) { // 如果是数组(比如Logiciels),转成逗号分隔的字符串 const value = Array.isArray(this[key]) ? this[key].join(", ") : this[key]; infoStr += `${key}: ${value}\n`; } } return infoStr; };
现在创建实例并测试,就能得到完整输出了:
// 创建配置实例 const myComputer = new OrdiConfigure("Intel i7", "32GB", "1TB SSD"); // 调用Logiciels收集表单选中的软件 Logiciels(myComputer); // 测试toString() console.log(myComputer.toString()); // 现在会输出所有配置键值对
3. 存储到localStorage的步骤
收集完所有数据后,把对象转成JSON字符串存入localStorage:
// 将实例转为JSON字符串(localStorage只能存字符串) const configJson = JSON.stringify(myComputer); // 存入localStorage,自定义键名 localStorage.setItem("campusComputerConfig", configJson); // 后续读取数据的方式: const savedConfig = JSON.parse(localStorage.getItem("campusComputerConfig")); console.log(savedConfig);
排查小提示
- 确认
document.forms[2]是你要操作的目标表单(表单索引从0开始,forms[2]是第三个表单) - 检查构造函数实例是否正确初始化,避免出现
undefined的属性 - 不要把toString()写在构造函数内部,否则每个实例会重复创建方法,还可能出现绑定问题
内容的提问来源于stack exchange,提问作者PostMaloneM3m3r
相关产品推荐
相关产品推荐

