Object扩展
-
Object.create(proto[, descriptors])
-
作用:以指定对象为原型创建新的对象
-
可选参数
-
value:指定值
-
writable:标识当前属性是否可以修改,默认为false
-
configurable:标识当前属性是否可以被删除,默认为false
-
enumerable:标识当前属性是否能用for in枚举,默认为false
-
const obj = { name: 'lisi', age: 20, setName: function () { this.name = 'wang' } } const obj2 = Object.create(obj, { sex: { value: '男', writable: true, configurable: true, enumerable: true } })
-
-
Object.defineProperty(obj, propertyName, descriptor)
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。-
const obj = { name: 'lisi', age: 20, }; var sex = '男' Object.defineProperty(obj, 'sex', { get: function () { console.log('get调用', this); return sex; }, //当获取扩展属性值的时,get方法被调用 set: function (value) { console.log('set调用', value); sex = value } //当修改扩展的属性值时,set方法被调用 }) obj.sex = '女111' //修改扩展的属性值 console.log(obj); console.log(obj.sex);//获取扩展属性值
-
-
for in
注意点-
使用
for in
可以枚举对象的属性,但同时会枚举该对象原型上的属性 -
使用
hasOwnPropety()
检测对象自身是否有这个属性 -
const obj = { name: 'lisi', age: 20 } obj.__proto__.sex = '男' for (let i in obj) { if (obj.hasOwnProperty(i)) { //不加这行会输出name,age,sex console.log(i); //name,age } }
-