ES5给object扩展的一些静态方法
1. Object.create(prototype[, descriptors]) : 创建一个新的对象
1). 以指定对象为原型创建新的对象
2). 指定新的属性, 并对属性进行描述
value : 指定值
writable : 标识当前属性值是否是可修改的, 默认为true
get : 用来得到当前属性值的回调函数
set : 用来监视当前属性值变化的回调函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> 'use strict' // 1. Object.create(prototype,[descriptors]) // 作用:以指定对象作为原形的创建的新对象 // 为新的对象指定新的属性,并对属性进行描述 // value:指定值 // writable 标识当前属性是否可以被修改,默认为false // configurable:标识当前属性是否可以被删除,默认为false // enumerable:标识当前属性是否能用for in 枚举,默认为false var obj={username:'damu',age:30} var obj1={} //Object O是大写 // obj1=Object.create(obj); // console.log(obj1) //obj1 添加属性 // obj1=Object.create(obj,{ // sex:{ // value:'男' // } // }) // console.log(obj1.sex) //修改obj1的属性 // obj1=Object.create(obj,{ // sex:{ // value:'男', // writable:true // } // }) // console.log(obj1.sex) // obj1.sex='女' // console.log(obj1.sex); // 删除obj1的属性 // obj1=Object.create(obj,{ // sex:{ // value:'男', // writable:true, // configurable:true // } // }) // console.log(obj1.sex) // obj1.sex='女' // console.log(obj1.sex) // delete obj1.sex; // console.log(obj1) // for in 枚举 obj1=Object.create(obj,{ sex:{ value:'男', writable:true, configurable:true, enumerable:true } }) for(var i in obj1){ console.log(i) } </script> </body> </html>
2. Object.defineProperties(object, descriptors) : 为指定对象定义扩展多个属性
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>03_Object扩展</title> </head> <body> <!-- ES5给Object扩展了好一些静态方法, 常用的2个: 1. Object.create(prototype, [descriptors]) * 作用: 以指定对象为原型创建新的对象 * 为新的对象指定新的属性, 并对属性进行描述 value : 指定值 writable : 标识当前属性值是否是可修改的, 默认为false configurable: 标识当前属性是否可以被删除 默认为false enumerable: 标识当前属性是否能用for in 枚举 默认为false 2. Object.defineProperties(object, descriptors) * 作用: 为指定对象定义扩展多个属性 * get :用来获取当前属性值得回调函数 * set :修改当前属性值得触发的回调函数,并且实参即为修改后的值 * 存取器属性:setter,getter一个用来存值,一个用来取值 --> <script type="text/javascript"> //Object.defineProperties(object, descriptors) 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); obj2.firstName = 'tim'; obj2.lastName = 'duncan'; console.log(obj2.fullName); obj2.fullName = 'kobe-bryant'; console.log(obj2.fullName); </script> </body> </html>
3.
对象本身的两个方法
* get propertyName(){} 用来得到当前属性值的回调函数
* set propertyName(){} 用来监视当前属性值变化的回调函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 对象本身的两个方法 * 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); obj.fullName = 'curry stephen'; console.log(obj.fullName); </script> </body> </html>
古人学问无遗力,少壮工夫老始成。
纸上得来终觉浅,绝知此事要躬行。