一、ES5给Object扩展了好一些静态方法, 常用的2个: Object.create 和 Object.defineProperties
1. Object.create(prototype, [descriptors]) ==>> Object.create(原型对象, [新的实例对象的 (属性) 描述])
作用: 以指定对象为原型创建新的对象
为新的对象指定新的属性, 并对属性进行描述
value : 指定值
writable : 标识当前属性值是否是可修改的, 默认为false
configurable: 标识当前属性是否可以被删除 默认为false
enumerable: 标识当前属性是否能用for in 枚举 默认为false
实例:
<script type="text/javascript">
var obj = {name : 'curry', age : 29}
var obj1 = {};
obj1 = Object.create(obj, {
sex : {
value : '男',
writable : true
}
});
obj1.sex = '女';
console.log(obj1.sex); // 女
console.log(obj1.name); // curry
console.log(delete obj1.sex); //false
for (var key in obj1) {
console.log(key); //name / age ==> 没有sex
}
</script>
2. Object.defineProperties(object, descriptors) ==>> Object.defineProperties(指定对象, 新增的属性描述)
作用: 为指定对象定义扩展多个属性
get :用来获取当前属性值得回调函数
set :修改当前属性值得触发的回调函数,并且实参即为修改后的值
存取器属性:setter,getter一个用来存值,一个用来取值
实例:
<script type="text/javascript">
var obj2 = {
firstName : 'curry',
lastName : 'stephen'
};
Object.defineProperties(obj2, {
fullName : {
get : function () {
return this.firstName + '-' + this.lastName
},
set : function (data) {
var names = data.split('-');
this.firstName = names[0];
this.lastName = names[1];
}
}
});
console.log(obj2.fullName); //curry-stephen
obj2.firstName = 'tim';
obj2.lastName = 'duncan';
console.log(obj2.fullName); //tim-duncan
obj2.fullName = 'kobe-bryant';
console.log(obj2.fullName); //kobe-bryant
console.log(obj2.firstName); //kobe
console.log(obj2.lastName); //bryant
</script>
二、对象本身的两个方法
get propertyName(){} 用来得到当前属性值的回调函数
set propertyName(){} 用来监视当前属性值变化的回调函数
<script type='text/javascript'>
var obj = {
firstName : 'kobe',
lastName : 'bryant',
get fullName(){
return this.firstName + ' ' + this.lastName
},
set fullName(data){
var names = data.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
};
console.log(obj.fullName); //kobe bryant
obj.fullName = 'curry stephen';
console.log(obj.fullName); //curry stephen
console.log(obj.firstName); //curry
console.log(obj.lastName); //stephen
</script>
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!