标准内置对象Object
1、Object.defineProperty()
/** * Object.defineProperty() * Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者 * 修改一个对象的现有属性,并返回此对象。 * * 备注:应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object * 类型的实例上调用。 * * 语法: * Object.definePropery(obj, prop, descriptor) * obj: 要定义属性的对象。 * prop: 要定义或修改的属性的名称或symbol。 * descriptor: 要定义或修改的属性描述符。 * * 默认情况下,使用Object.defineProperty()添加的属性值是不可修改(immutable)的。 */ let obj = { age: 18 } // 定义新属性 Object.defineProperty(obj, 'name', { value: '王一博', writable: false }) console.log(obj.name) // 修改已存在的属性 Object.defineProperty(obj, 'age', {value: 25, writable: false}) console.log(obj.age)
2、Object.keys()
/** * Object.keys() * Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组 * 中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。 */ let obj = { name: '王一博', age: '25', gender: 'male' } console.warn(Object.keys(obj)) // [ 'name', 'age', 'gender' ]
3、Object.assign()
/** * 【可枚举】:Object.propertyIsEnumberable()返回true * 【自有】:Object.hasOwnProperty()返回true * * Object.assign()方法将所有【可枚举】的【自有】属性从一个或多个源对象复制 * 到目标对象,返回修改后的对象。 * 语法: * Object.assign(target, ...sources) * 参数: * target:目标对象,接收源对象属性的对象,也是修改后的返回值。 * sources:源对象,包含被合并的属性。 * 描述: * 如果目标对象与源对象具有相同的key,则目标对象中的属性将被源对象中的属性覆盖, * 后面的源对象属性将类似的覆盖前面的源对象的属性。 */ const target = {name: 'yiyi', age: 18, weight: 100} const source = {name: 'erer', age:19, hobby: '散步'} const returnedTarget = Object.assign(target, source) console.log(returnedTarget === target) // true console.log(returnedTarget) // { name: 'erer', age: 19, weight: 100, hobby: '散步' }