如何在JavaScript对象中实现两个属性值相加?
解决对象内部属性计算的问题
你当前的写法无效,原因有两个:一是对象字面量初始化阶段,无法直接引用自身的其他属性;二是[hours]是创建数组的语法,不是引用属性的正确方式。另外原代码还有两处小错误:mintues拼写应为minutes,第二个对象的title属性末尾缺了逗号,会导致语法报错。
下面提供几种可行的解决方案:
方案1:先创建对象,再批量赋值
最直接的方式,先定义对象基础属性,再遍历计算totalLength:
let movies = [ { title: "Rosaline", hours: 1, minutes: 36 }, { title: "The Good Nurse", hours: 2, minutes: 3 } ]; // 遍历数组为每个对象添加计算后的时长 movies.forEach(movie => { movie.totalLength = movie.hours * 60 + movie.minutes; });
方案2:使用getter动态计算
用getter属性可以让totalLength在被访问时自动计算,后续修改hours或minutes时,它也会同步更新:
let movies = [ { title: "Rosaline", hours: 1, minutes: 36, get totalLength() { return this.hours * 60 + this.minutes; } }, { title: "The Good Nurse", hours: 2, minutes: 3, get totalLength() { return this.hours * 60 + this.minutes; } } ]; // 直接访问即可得到结果 console.log(movies[0].totalLength); // 输出96
方案3:用工厂函数创建对象
如果需要创建多个同结构的电影对象,工厂函数能避免重复代码,一次性完成属性定义和计算:
function createMovie(title, hours, minutes) { return { title, hours, minutes, totalLength: hours * 60 + minutes }; } let movies = [ createMovie("Rosaline", 1, 36), createMovie("The Good Nurse", 2, 3) ];
内容的提问来源于stack exchange,提问作者d50org
相关产品推荐
相关产品推荐

