在 JavaScript 和 Vue.js 中,对象有多种简写形式可以简化代码。
以下是常见的对象简写方式及示例:
1. 属性简写(同名省略)
当属性名和变量名相同时,可以省略键值:
// 传统写法
const name = 'Alice';
const age = 25;
const user = { 
  name: name, 
  age: age 
};
// 简写形式
const user = { name, age }; 
// 等价于 { name: name, age: age }
2. 方法简写(省略 : function)
对象方法可以省略 : function:
// 传统写法
const obj = {
  sayHello: function() {
    console.log('Hello');
  }
};
// 简写形式
const obj = {
  sayHello() {
    console.log('Hello');
  }
};
3. 计算属性名(动态键名)
使用 [] 包裹表达式作为属性名:
const key = 'user_' + Math.random();
const obj = {
  [key]: 'Alice'  // 键名由表达式计算结果决定
};
4. Vue 特定简写
(1)v-bind 简写
<!-- 传统写法 -->
<img v-bind:src="imageSrc">
<!-- 简写形式 -->
<img :src="imageSrc">
(2)v-on 简写
<!-- 传统写法 -->
<button v-on:click="handleClick">Click</button>
<!-- 简写形式 -->
<button @click="handleClick">Click</button>
5. 对象展开运算符(...)
合并对象时可以使用展开运算符:
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = { ...obj1, ...obj2 }; 
// 结果: { a: 1, b: 2 }
6. 解构赋值简写
从对象中提取属性时简写:
const user = { name: 'Alice', age: 25 };
// 传统写法
const name = user.name;
const age = user.age;
// 简写形式
const { name, age } = user;
7. Vuex 中的简写
(1)mapState 简写
// 传统写法
computed: {
  count() {
    return this.$store.state.count;
  }
}
// 简写形式
import { mapState } from 'vuex';
computed: {
  ...mapState(['count'])
}
(2)mapActions 简写
// 传统写法
methods: {
  increment() {
    this.$store.dispatch('increment');
  }
}
// 简写形式
methods: {
  ...mapActions(['increment'])
}
8. 箭头函数简写
对象方法中使用箭头函数时需注意 this 绑定:
const obj = {
  // 传统写法
  sayHi: function() {
    console.log(this.name);
  },
  // 箭头函数简写(会丢失this绑定)
  sayHi: () => {
    console.log(this.name); // 可能得到undefined
  }
};
9. 默认值简写
// 传统写法
const options = {
  timeout: options.timeout || 3000
};
// 简写形式
const options = {
  timeout: 3000 // 直接写默认值
};
关键区别总结
| 场景 | 传统写法 | 简写形式 | 
|---|---|---|
| 同名属性 | { name: name } | 
{ name } | 
| 对象方法 | { sayHi: function(){} } | 
{ sayHi(){} } | 
| 动态属性名 | 需额外声明变量 | { [key]: value } | 
| Vue指令 | v-bind:src / v-on:click | 
:src / @click | 
| 对象合并 | Object.assign({}, a, b) | 
{ ...a, ...b } | 
这些简写形式能让代码更简洁,但需注意在团队项目中保持风格一致。
