Object的扩展
ES5给0bject扩展了一些静态方法,下面列举较为常用的方法。
方法一
object. create(prototype, [descriptors])
作用:以指定对象为原型,创建新的对象。同时,第二个参数可以为新的对象添加新的属性。
举例1:(没有第二个参数时)
var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};
obj2 = Object.create(obj1);
console.log(obj2);
打印结果:
上方代码中,obj1成为了obj2的原型。
举例2:(有第二个参数时)
var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};
obj2 = Object.create(obj1,{
sex: {
value: '男',
writable: false,
configurable: false,
enumerable: false
}
});
console.log(obj2);
打印结果:
上方代码中,obj2设置了一个新的属性sex ,但是要通过value
来设置属性值。设置完属性值后,这个属性值默认是不可修改的,要通过writable
来设置。
可设置的属性:
value
:设置属性值。writable
:标识当前属性值是否可修改。如果不写的话,默认为false ,不可修改。configurable
:标识当前属性是否可以被删除。默认为false ,不可删除。enumerable
:标识当前属性是否能用for in枚举。默认为false ,不可枚举。
方法二
Object.defineProperty(obj, prop, descriptor)
作用:在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。
举例1:
var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};
obj2 = Object.create(obj1,{
sex: {
value: '男',
writable: false,
configurable: false,
enumerable: false
}
});
Object.defineProperty(obj2,"address",{
value: 'HuiZhou',
writable: false,
configurable: false,
enumerable: false
});
console.log(obj2);
打印结果:
方法三
Object.defineProperties(object,descriptors)
作用:为指定对象定义扩展多个属性。
举例1:
var obj3 = {};
Object.defineProperties(obj3, {
firstName: {
value: 'Lin',
enumerable: true
},
lastName: {
value: 'Ht',
enumerable: true
},
fullName: {
get:function(){
return this.firstName + '-' + this.lastName;
},
set:function(data){
var names = data.split('-');
this.firstName = names[0];
this.lastName = names[1];
},
enumerable: true
}
});
console.log(obj3);
for (let key in obj3) {
let value = obj3[key];
console.log({key,value});
}
打印结果:
get
:用来获取当前属性值的回调函数。set
:修改当前属性值得触发的回调函数,并且实参即为修改后的值。
Obj 对象本身自带方法
get 属性名(){} 用来得到当前属性值的回调函数。
set 属性名(){} 用来监视当前属性值变化的回调函数。
举例1:
var teacher = {
firstname: "Lin",
lastname: "Ht",
age: "18",
get fullname(){
return this.firstname + '-' + this.lastname;
},
set fullname(data){
var arr = data.split("-");
if(arr.length==2){
this.firstname = arr[0];
this.lastname = arr[1];
}else{
console.error("输入的名字不规范");
}
},
get brief(){
return"我的名字是"+this.firstname + this.lastname+",我的年龄是"+this.age;
}
};
console.log(teacher);
打印结果:
Json对象
通常情况下“json字符串”只有两种: json对象、json数组。typeof json字符串的返回结果是string。
下面列举Json对象的两个方法。
1、js对象(数组) --> json对象(数组) :
JSON.stringify(obj/arr)
2、json对象(数组) --> js对象(数组) :
JSON.parse(json)