1、如何定义一个对象
ES6之前:
var a=new Object()
var a={}
这两种定义对象是有原型链存在,并可以使用原型链上方法如toString()
等
ES6新增另外一种:
var b=Object.create()
b.toString() //报错:b.toString is not a function
这种方法定义对象,是不存在原型的,里面就真的啥方法都没有,空空如也。
2、对象如何获取变量key
ES6之前:
var name='a'
var object={}
object[name]=1
console.log(object) //{a:1}
ES6修改成:
var name='a'
var object={[name]:1} //直接一步到位
console.log(object) //{a:1}
3、对象属性定义
ES6之前:
var o = {
a: a,
b: b,
c: c
};
var o={
sayHi:function(){}
}
ES6修改成:
var o = {a, b, c}; //key和valuet同名可以进行缩写
var o={
sayHi(){} //省略了function
}
4、ES6对象新增了getter和setter方法
var o={
_age:18, //加下划线防止名字相同
get age(){return o._age}, //获取
set age(value){if(value<100){o._age=value}else{o._age=100}} //设置
}
33.png
调用o.age就相当调用了getter方法,调用o.age=1000就相当调用了setter方法。ES6使得对象属性可以自行定义获取和设置。
5、对象的浅拷贝(两个地址不一样的对象)
ES6之前:
var obj1={a:1,b:2,c:3}
var obj2={}
for(let key in obj1){
obj2[key]=obj1[key]
}
console.log(obj2) //{a: 1, b: 2, c: 3}
注意:这种不是浅拷贝,修改obj2会导致obj1也会变
var obj1={a:1,b:2,c:3}
obj2= obj1 //这不是浅拷贝,而是引用同一个地址的对象
ES6新增:
(1)、Object.assign()方法
var obj1={a:1,b:2,c:3}
var obj2=Object.assign({},obj1) //将后面对象拷贝到前面的空对象
console.log(obj2) //{a: 1, b: 2, c: 3}
(2)、用剩余参数方法
var obj1={a:1,b:2,c:3}
var obj2={...obj1}
console.log(obj2) //{a: 1, b: 2, c: 3}
6、对象的原型
var a={}
a.__proto__===Object.prototype //打印出true,说明Object.prototype 是a的原型
如何修改对象原型
var b={
sayHi(){
console.log('hi')
}
}
a=Object.create(b) //修改原型方法,不推荐用__proto__
a.__proto__===b //打印出true,说明 b 是a的原型
如何找出对象原型
a.__proto__ //不推荐方法
Object.getPrototypeOf(a) //ES6推荐方法
7、属性修饰符
Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
Object.defineProperty,用到时候查看一下MDN即可
网友评论