一、先吐个槽:没ES6时,写对象像在写八股文
还记得五年前写JavaScript对象的酸爽吗?想给对象加个方法?先恭恭敬敬敲个function关键字;想用变量当属性名?得吭哧吭哧先创建对象再单独赋值。最窒息的是模块导出,每个都要手动指定键值对,活像在写产品说明书:
// 老派写法:仿佛在给代码行三叩九拜
var userName = "小明";
var userAge = 18;
var user = {
userName: userName,
userAge: userAge,
sayHello: function() {
console.log("我是" + this.userName);
}
};
module.exports = {
user: user,
// 每个导出都要重复写两遍变量名,手酸不?
};
这种写法不仅啰嗦,还容易出错。比如一不留神把userName写成username,立马给你颜色看。而ES6的对象字面量增强,就像给代码界送了台全自动洗衣机——脏活累活它全包了!
二、ES6对象四大狠活:让代码自己长脑子
活1:属性简写——变量名直接变属性名
现在只要变量名和属性名一致,直接丢进对象就行,JS自动帮你配对:
const name = "Vue3";
const version = "3.2.0";
// 新时代写法:JS自动理解你要{name: name, version: version}
const framework = { name, version };
console.log(framework); // {name: 'Vue3', version: '3.2.0'}
这招在Vue的data()里特别香,再也不用像复读机一样重复字段名了。
活2:方法简写——告别function关键字
方法定义从此变得像喝奶茶一样丝滑:
// 以前:sayHello: function() {...}
// 现在:直接写方法名+括号
const user = {
name: "小明",
sayHello() { // 看着就神清气爽!
console.log(`你好,我是${this.name}`);
}
};
在Vue的方法定义中,这种写法让代码看起来像首诗。
活3:计算属性名——属性名也能动态生成
最炸裂的功能来了!属性名可以用[]包裹表达式动态生成:
const dynamicKey = "age";
const user = {
name: "小明",
[dynamicKey + "Value"]: 18, // 属性名变成"ageValue"
["get" + dynamicKey.toUpperCase()]() { // 方法名也能玩花样!
return this.ageValue;
}
};
这相当于给对象装了台智能打印机——需要什么属性名,现场生成!
活4:super关键字——终于能精准找爸妈
ES6还贴心地给了super关键字,让对象方法能准确调用原型链上的方法,避免了直接写Parent.prototype.method.call(this)这种反人类的操作。
三、Vue+ES6对象语法:天作之合的真实案例
案例1:智能组件配置——计算属性名实战
想象一个场景:根据用户权限动态显示不同按钮的组件。用计算属性名简直不要太爽:
<template>
<div>
<button v-if="buttons.showEdit">编辑</button>
<button v-if="buttons.showDelete">删除</button>
</div>
</template>
<script>
export default {
data() {
const userRole = "admin"; // 实际场景从接口获取
return {
userRole,
// 根据角色动态生成按钮配置
buttons: {
[`show${userRole === "admin" ? "Edit" : "View"}`]: true,
[`show${userRole === "admin" ? "Delete" : "Report"}`]: true
}
};
}
};
</script>
当userRole为admin时,自动生成showEdit和showDelete属性——代码自己会做判断!
案例2:方法定义极简主义——Vue方法书写革命
对比一下传统写法和ES6写法在Vue中的差距:
<script>
// 传统写法:满屏的function看得眼晕
export default {
methods: {
handleClick: function() {
// ...逻辑
},
submitForm: function() {
// ...逻辑
}
}
};
// ES6写法:清爽得像刚减肥成功
export default {
methods: {
handleClick() {
// ...逻辑
},
submitForm() {
// ...逻辑
}
}
};
</script>
方法越多,省下的function关键字就越多——积少成多,代码可读性直线上升!
案例3:模块导出变形记——Vuex store的优雅组织
在Vuex的module组织中,ES6的增强对象字面量让代码模块化变得异常优雅:
// store/modules/user.js
const state = { userInfo: null };
const mutations = { setUser(state, payload) {...} };
const actions = { login({ commit }, credentials) {...} };
// 导出时直接利用属性简写,避免重复命名
export default { state, mutations, actions };
// 主文件导入时更是简洁到哭
import userModule from "./modules/user";
export default new Vuex.Store({
modules: { user: userModule } // 进一步简写:直接写{ user }也行
});
四、进阶玩法:当对象展开符遇上Vue
虽然严格来说展开运算符(...)不是对象字面量的增强部分,但它在ES6体系中与对象操作息息相关,在Vue中更有妙用:
<script>
// 优雅合并响应式数据
export default {
data() {
const baseConfig = { pageSize: 10, showPager: true };
const customConfig = { pageSize: 20, theme: "dark" };
return {
// 用展开符智能合并配置,后者覆盖前者
config: { ...baseConfig, ...customConfig }
// 结果:{pageSize: 20, showPager: true, theme: "dark"}
};
}
};
</script>
五、避坑指南:这些雷区千万别踩!
坑1:方法简写与箭头函数的爱恨情仇
// 错误示范:箭头函数丢失this指向
const badExample = {
name: "小明",
sayHello: () => {
console.log(this.name); // this指向window,哭唧唧
}
};
// 正确姿势:乖乖用方法简写
const goodExample = {
name: "小明",
sayHello() {
console.log(this.name); // this正确指向当前对象
}
};
坑2:计算属性名不是万能的
动态属性名虽然酷,但过度使用会让代码像谜语:
// 别这样写!队友看了想打人
const obj = {
[a + b + c]: value,
[getKeyFromServer()]: value
};
// 适当的动态性很优雅,过度使用就是代码界的杀马特
六、总结:好代码不说谎,简洁即是正义
ES6的对象字面量增强不是简单的语法糖,而是开发思维的升级。在Vue项目中,这些特性让代码从「能跑就行」进化到「优雅易维护」。记住:每次你少写一个function关键字,每次你巧妙使用计算属性名,都是在为未来的自己减负。
就像谈恋爱一样,最好的关系是相处不累——代码和你,也该如此。

被折叠的 条评论
为什么被折叠?



