ES6 Object方法扩展的应用实例分析
本文实例讲述了ES6Object方法扩展的应用。分享给大家供大家参考,具体如下:
在ES6中针对对象的方法做了一些扩展和优化,下面简单总结下常用的方法
is方法判断两个对象是否全等
console.log(Object.is({},{}),{}==={});//false,false
console.log(Object.is(NaN,NaN),NaN===NaN);//true,false
console.log(Object.is(+0,-0),+0===-0);//false,true
assign方法用于对象属性的拷贝
如果两个参数,把第二个参数中可枚举的属性拷贝到第一个参数对象中,仅限于可枚举的属性,如果有多个参数,那么同样拷贝
varobj={};
varobj2=Object.assign(obj,{name:'Joh'},{age:10});
console.log(obj===obj2,obj);//true,{name:'Joh',age:10}
console.log(Object.is(obj,obj2));//true
相同属性的覆盖拷贝
constDEFAULT_OPTIONS={
name:"Joh"
};
functiontest(opts){
letoptions=Object.assign({},DEFAULT_OPTIONS,opts);
console.log(options);
}
test();//{name:"Joh"}
test({name:"Lily",age:10});//{name:"Lily",age:10}
Symbol属性同样拷贝
varskey1=Symbol('test');
varskey2=Symbol('test');
varobj={};
Object.assign(obj,{name:'Joh'},{age:10},{[skey1]:'Iamtest1'},{[skey2]:'Iamtest2'});//拷贝
//验证Symbol的拷贝成功
console.log(obj[skey1]);//Iamtest
console.log(obj);//{name:"Joh",age:10,Symbol(test):"Iamtest1",Symbol(test):"Iamtest2"}
Object方法:keys,getOwnPropertyNames,getOwnPropertySymbols,getOwnPropertyDescriptor的应用
classA{
constructor(){
this.name='Joh';
}
[Symbol('fullnameA')](){
}
getName(){
}
}
classBextendsA{
constructor(){
super();
this.age=22;
}
[Symbol('fullnameB')](){
}
getAge(){
}
}
B.prototype.getColor=function(){};
varb=newB();
//备注:只能获取【自身可枚举属性】,但得不到【原型链上的属性(比如方法)+Symbols属性】
console.log(Object.keys(b));//["name","age"]
//备注:可获取【可枚举属性】,但得不到【原型链上的属性+Symbols属性】
console.log(Object.getOwnPropertyNames(b));//["name","age"]
//使用keys怎么也得不到原型链上不可枚举的属性[通过语法糖创建的方法]
console.log(Object.keys(B.prototype));//["getColor"]
//使用getOwnPropertyNames传入prototype可以得到原型链上的属性
console.log(Object.getOwnPropertyNames(B.prototype));//["constructor","getColor","getAge"]
//通过getOwnPropertySymbols可以得到自身Symbols属性,但得不到继承的Symbol属性
console.log(Object.getOwnPropertySymbols(B.prototype));//[Symbol(fullnameB)]
//获取自身可枚举属性包括继承过来的,备注:通过class内部的语法糖创建的方法是不可枚举的,但是通过后期B.prototype.出来的是可枚举的
for(letkeyinb){
console.log(key);//依次输出name和age和getColor
}
//描述对象测试可枚举性
console.log(Object.getOwnPropertyDescriptor(B.prototype,'getColor'));
console.log(Object.getOwnPropertyDescriptor(B.prototype,'getColor').enumerable);//true
console.log(Object.getOwnPropertyDescriptor(B.prototype,'getAge').enumerable);//false
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。