ES6对象的扩展

1. 属性名的简介表示法

const foo = 'bar';
const baz = {
    foo,
    hello(){
        console.log(this.foo);
    }
};
baz.hello();//bar

上面分别是对对象的属性和方法的

2.属性名表达式

const foo = ‘bar’;
const baz = {
[foo]:’foo’,
hello(){
console.log(this.bar);
}
};
baz.hello();//foo

属性名表达式可以对[]语句求值,其值为新的属性名。对求值结果为一个字符串的变量可以使用。但如果所求值为一个对象,会生成[object Object]字符串,容易误解。尽量不要使用。
3.对象方法的name属性

const foo = ‘bar’;
const baz = {
[foo]:’foo’,
hello(){
console.log(this.bar);
}
};
console.log(baz.hello.name);//hello

对get和set方法例外
对由function和bind绑定的方法例外

4. Object.is(a,b)方法
-------------------

相当于  a===b;但略有不同

console.log(Object.is(NaN,NaN));//true
console.log(Object.is(0,-0));//false


5. Object.assign(target,a,b..)方法
================================

将所有对象的**可枚举的非继承**属性加入到一个对象中,并返该对象

let newBaz = Object.assign({},baz,{a:1,b:2});
let bazKeys = Object.keys(newBaz);//[ ‘bar’, ‘hello’, ‘a’, ‘b’ ]

注意:1.后面对象的属性会**覆盖**前面对象的属性。若只有一个对象,则返回该对象。2.执行浅拷贝。3.对于数组,会把数组转化为属性为‘0’,‘1’,‘2...的对象。4.对于取值函数,则是将新属性的值设为所取值(即函数执行后的返回结果)

6. 作用

    1.为对象添加属性
    2.为对象添加方法
    `clas.addAtr({a:1,b:2});
     var clasKeys = Object.keys(clas);//[ 'addAtr', 'a', 'b' ]
     `
    3.克隆对象*// 注意不能直接克隆继承链*
    4.拷贝对象
    5.添加默认值*//后者覆盖*
7.属性的可枚举性

let o = Object.getOwnPropertyDescriptor(clas,’addAtr’);
o={ value: [Function: addAtr],
writable: true,
enumerable: true,
configurable: true }
其中 enumerable为可枚举属性

let o = Object.getOwnPropertyDescriptor(Object.prototype,’toString’);
{ value: [Function: toString],
writable: true,
enumerable: false,
configurable: true }
“`
for … in..
Object.keys()
JSON.stringfy()
Object.assign()
会忽略掉 enumerable: false的属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值