5.扩展的对象功能

155 阅读1分钟

1.对象属性赋值、方法的简写

es5写法:

const name = 'tom', age = 20;
const person = {
    name: name,
    age: age,
    getName: function () {
        console.log(this.name);
    }
};
person.getName();//tom

es6直接写入变量和函数,作为对象的属性和方法:

const name = 'tom', age = 20;
const person = {
    name,//等价于name:name
    age,
    getName() {
        console.log(this.name);
    }
};
person.getName();//tom

注意: es6写法中对象的属性名必须和定义的变量名一样,否则会报错。

2.函数返回对象的简写

es5写法:

function fn(x, y) {
    return {x: x, y: y};
}

console.log(fn(1, 2));//{x: 1, y: 2}

es6简写:

function fn(x, y) {
    return {x, y};
}

console.log(fn(1, 2));//{x: 1, y: 2}

3.使用表达式对属性名和方法名进行组合

const obj = {};
const name = 'a';
obj[name + 'bc'] = 123;
obj['get' + 'Name'] = function () {
    console.log(this.abc);
};
console.log(obj);//{abc: 123, getName: ƒ}
obj.getName();//123
//--------------------
const name = 'a';
const obj = {
    [name + 'bc']: 123,
    ['f' + 'un']() {
        console.log(this.abc);
    }
};
console.log(obj);//{abc: 123, fun: ƒ}
obj.fun();//123

4.对象的方法

Object.is():===的作用一样,用来比较两个值是否严格相等。但是===还有个缺陷

console.log(NaN === NaN);//false,===的缺陷
console.log(Object.is(NaN, NaN));//true

Object.assign(): 将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

let newObj = Object.assign({},{a:1},{b:2});
console.log(newObj);//{a: 1, b: 2}