# 属性初始值简写
function createPerson(name, age) {
return {
name, // name: name
age // age: age
}
}
# 方法简写
var person = {
name: "abc",
sayName(){
console.log(this.name);
},
// sayName: function() {
// console.log(this.name);
// }
}
# 可计算属性名
let lastName = "abc";
let person = {
[lastName]: "Zakas"
}
console.log(person[lastName]);
# 新增方法
- Object.js(v1, v2)
// Object.is() 大部分情况与 === 运算一样
// 除了 +0 和 -0 被识别为不等, NaN 和 NaN 相等。
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
- Object.assign(receiver, supplier)
// 用来代替 Mixin,extend;
// 他们的作用就是把supplier对象的属性浅复制给receiver对象
function Mixin(receiver, supplier) {
Object.keys(supplier).forEach((key)=>{
receiver[key] = supplier[key];
});
return receiver;
}
// es6的写法
Object.assign(receiver, supplier);
// 注意
// 1. Object.assign 接收任意数量的 supplier,
// 属性相同的话,后面的会覆盖前面的
// 2. 不能复制 getter, setter,
// 有 getter, setter的话,会添加 getter, setter的返回值作为属性名。
# 重复的对象字面量属性
# 自由属性枚举顺序
Object.getOwnPropertyNames()
- 所有数字键按升序排列。
- 所有字符串键按照它们被加入对象的顺序排列。
- 所有Symbol键按照它们被加入对象的顺序排列。
# 改变对象原型
- Object.getPrototypeOf()
- Object.setPrototypeOf()
# 简化原型访问的Super引用
let person = {
getCreeting(){
return "Hello";
}
}
let friend = {
getGreeting(){
// 1. super 只能在简写的方法中调用c
// 2. getGreeting内部[[HomeObject]]属性为friend
return super.getCreeting() + ", hi";
}
}
Object.setPrototypeOf(friend, person);
console.log(friend.getGreeting()); // Hello, hi