Object的扩展方法常用的两种
1.Obeject.create(prototype,descritors)
Obeject.create(prototype,descritors):将新的对象为原型创建新的对象。该方法接受两个参数
1.prototype:将新的对象为原型
2.descritors:为新的对象添加新的属性,包含描述性属性
value:属性值,
2.1writetable:是否可修改的新的属性值;默认false,不可修改;
2.2configurable:是否可删除新的属性;默认false,不可删除;
2.3ennumerable:是否可用枚举;默认false,不可枚举
直接进入正题,上代码
// Obeject.create(prototype,descritors)
var obj = {name:'kobe',age:38}
var obj1 = {}
obj1 = Object.create(obj,{ //将obj最为boj1的原型对象,并且给obj1自身设置属性
sex: {
value: '男',
writetable: true, //表示该属性值可以进行修改
configurable: true, //表示可以对该属性进行删除
ennumerable: true, //表示可以对属性进行枚举
}
})
console.log(obj1)
obj1.sex = '女'
console.log(obj1.sex) //女
for(var i in obj1) {
console.log(i) //sex
}
delete obj1.sex
console.log(obj1.sex) // {}
/*{sex: "男"}
sex: "男"
__proto__:
name: "kobe"
age: 38
*/
2.Obeject.defineProperties(object,descritors)
Obeject.defineProperties(object,descritors):可以为指定对象添加扩展属性(VUE数据双向绑定,就是利用ES5的Objec.defineProperties方法),该方法接受两个参数,
1.objec:指定的对象,
2.descritors:描述性属性
2.1get()方法,获取扩展属性,返回扩展属性值;
2.2set(val)方法,只要扩展属性值发生改变就会触发,参数就是修改后的值
直接进入正题,上代码
// Obeject.defineProperties(object,descritors)
var obj = { firstName: '123', scondName: '456' }
Obeject.create(obj, { //给obj添加一个扩展属性fullName
fullName: {
get: funcation() { //获取扩展属性,此处的this指向obj
reture this.firstName + this.scondName
},
set: funcation(val) { //监听扩展属性的变化,就会触发该方法,接受的参数就是修改后的扩展属性值
console.log(val) //val就是接受修改后的值 '77 99'
var arr = val.split(' ')
this.firstName = arr[0]
this.scondName = arr[1]
}
}
})
console.log(obj.fullName) //'123456'
obj.fullName = '77 99' //修改扩展属性值
console.log(obj.fullName) //'7799'
/*
我只是前端小学生一名,写的不好请多多担待,后面慢慢补充es5 es6 es7的相关内容
*/