1.Object新增一个方法,Object.create();,用来以一个对象为基础创建另一个对象,新建的对象的__proto__指向基础对象
var obj = {name:'maycpou',age:18};
var obj1 = Object.create(obj,{
sex:{//新增一个sex属性,该属性在obj1上而不是在__proto__上
value:'男',//sex属性的值
writable:true,//sex属性是否为可写的,即是否能用obj1.sex='女'改变属性的值,默认是false
configurable:true,//sex属性是否可被删除,即是否能用deleteobj1.sex删除sex属性,默认是false
enumerable:true//sex属性是否是可被列举的,即用for(var i in obj1){console.log(i);}是否能遍历到sex属性,默认是false
}
});
console.log(obj1);
2.Object新增一个方法,Object.defineProperties();,用来给一个对象新增属性
var obj2 = { firstName: 'tom', lastName: 'boston' };
Object.defineProperties(obj2, {//这个方法用于给一个对象添加属性
fullName: {//新增的属性名称是fullName
get: function () {//设置get方法,用来获取新增属性fullName的值
return this.firstName +' '+ this.lastName;
},
set: function (data) {//这个方法在fullName属性即将改变的时候调用,data是即将改变的fullName的值
//当使用obj2.fullName = 'jack foo';的时候,并不会直接改变fullName的属性,
//而是会调用这个方法,data的值为maycpou
var names = data.split(' ');
this.firstName = names[0];
this.firstName = names[1];
}
}
});
obj2.fullName='jack foo';
console.log(obj2.fullName);
上面的写法类似于:var obj2 = {
firstName: 'tom',
lastName: 'boston',
get fullName(){
return this.firstName +' '+ this.lastName;
}
set fullName(date){
var names = data.split(' ');
this.firstName = names[0];
this.firstName = names[1];
}
}