es6对象的扩充

1.对象属性简介的定义

不必向以前一样必须要键值对的形式定义,可以对已经定义的变量或函数直接放入对象,对象的属性名默认会和变量名相同。

const attribute = "attr";
const method = function (){
document.write("<br /> just simple define attribute");
}
const obj = {attribute,method}
		
document.write(obj.attribute);
obj.method();

2.属性名表达式

在es5定义属性只能只用 obj.a = ‘a’,或obj[a+‘b’]='ab’声明属性名。es6允许用中括号在用字面量的方式创建对象时,用表达式作为属性名

 const a = 'a';
 var obj ={
        a,
        [a+"b"]:"ab"
  }
 document.write(obj.ab);

3.对象属性的遍历

es6有5种方法遍历对象的属性
(1) for … in 循环,会遍历自身和继承的可枚举属性
(2) Oject.keys(obj)
返回一个不包含继承属性的可枚举的属性名数组。
(3)Object.getOwnPropertyNames(obj)
返回一个数组包含自身所有属性,不包括Symbol属性。
(4)Object.getOwnPropertySymbols(obj)
返回一个数组包含自身所有属性,包括Symbol属性。
(5)Reflect.ownKeys(obj)
返回对象所有属性,包括不可枚举属性,Symbol属性

4.Object.setPrototypeOf(sub,super);

增加了设置对象原型的方法

let animal = {
	say(){
		document.write("i'm a animal");
	},
	walk(){
				
	}
}
		
let person = {
  say(){
				document.write("i'm a human");
			},
  name:"ly"
			
}
		
Object.setPrototypeOf(person,animal);

5.增加super关键字

如果我们的方法重写了原型上的方法,但我们想调用原型上的方法以前只能通过,
Object.getPrototypeOf(this).say.call(this);去调用,而且这种方式在多继承时,会出现递归调用的问题。es6增加了super的关键字,super的值不是动态改变的,会指向当前对象的原型对象。且只能在简写的方法字面量中使用例如某个对象方法属性,say(){…},不能在say:function(){}中使用super关键字。

let animal = {
		say(){
			document.write("i'm a animal");
		},
		walk(){
				
		}
	};
		
	let person = {
		say(){
			super.say();
		},
		name:"ly"	
	};
		
		
	Object.setPrototypeOf(person,animal);
		
	person.say();

6. Object.is(obj1,ojb2)

也用来比较2个值是否相等,与===的区别是,=判断+0不能-0,NAN不等于NAN,Object.is()恰好与之相反,其他都和=一样。

Object.is(NAN,NAN)//true

7.Object.assign(target,source1,source2…);

将源对象的自身的可枚举属性,浅拷贝到目标对象中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值