Object扩展对象

1. Object.create(prototype,[descriptors])
        作用: 以指定对象为原型创建新的对象
              为新的对象指定新的属性,并对属性进行描述
              -value 指定值
              -writable 标识当前属性值是否是可修改的,默认为false
              -configurable 标识当前属性是否可被删除,默认为false
              -enumerable 标识当前属性是否可用for in枚举,默认false

var obj = {name:'Yoona',age:28};
var obj1 = Object.create(obj,{
    sex:{
        value:'女',
        writable:false,// 是否可修改
        configurable:false,// 是否可修改
        enumerable:false, // 是否可枚举
    }
})

 console.log(obj1)  可以看到obj1有sex属性,其原型上有obj的属性,所以obj1是以obj为原型创建的对象,它的新属性为sex.

var obj = {name:'Yoona',age:28}
	var obj1 = {}
	obj1 = Object.create(obj,{
		sex: {
			value: '女',
			writable: false ,// 是否可修改
			configurable: false,// 是否可被删除
			enumerable: false // 是否可枚举
		}
	})
	console.log(obj1)
	console.log(obj1.sex)// 女
	obj1.sex = '男';// 改变sex属性的值
	console.log(obj1.sex);//女 并没有改变
	delete obj1.sex;//删除sex属性
	console.log(obj1)// 并没有删除
	for(var i in obj1){// 枚举obj1对象
		console.log(i)// name age 并没有sex
	}


   

var obj = {name:'Yoona',age:28}
	var obj1 = {}
	obj1 = Object.create(obj,{
		sex: {
			value: '女',
			writable: true ,// 是否可修改
			configurable: true,// 是否可被删除
			enumerable: true // 是否可枚举
		}
	})
	console.log(obj1)
	console.log(obj1.sex)
	obj1.sex = '男'
	console.log(obj1.sex)
	delete obj1.sex
	console.log(obj1)

当writable,configurable,enumerable的值为true时:sex的值可以修改,也可以删除

var obj = {name:'Yoona',age:28}
	var obj1 = {}
	obj1 = Object.create(obj,{
		sex: {
			value: '女',
			writable: true ,// 是否可修改
			configurable: true,// 是否可被删除
			enumerable: true // 是否可枚举
		}
	})
	console.log(obj1)
	console.log(obj1.sex)
	obj1.sex = '男'
	console.log(obj1.sex)
	//delete obj1.sex
	//console.log(obj1)
	for(var i in obj1){
		console.log(i)
	}

sex属性也可以枚举出来

2. Object.defineproperties(object,description)
        作用: 为指定对象定义扩展多个属性
            -get 用来获取当前属性值的回调函数
            -set 修改当前属性值的触发的回调函数,并且实参即为修改后的值
            存取器属性: setter getter  一个用来存值 一个用来取值

var obj2 = {firstName: 'Taylor',lastName: 'Swift'}
Object.defineProperties(obj2,{
	fullName: {
		get: function(){// 获取扩展属性的值 获取扩展属性的值时自动调用
			return this.firstName + ' ' + this.lastName
		},
		set: function(data){// 监听扩展属性,当扩展属性发生变化时会自动调用,并将变化的值作为实参注入set函数
			var names = data.split(' ')
			this.firstName = names[0]
			this.lastName = names[1]
		}
	}
})
console.log(obj2)
console.log(obj2.fullName)
obj2.fullName = 'Taylor Smith'
console.log(obj2.fullName)

3. 对象本身的两个方法
        get propertyName(){} 用来得到当前属性值的回调函数
        set propertyName(){} 用来监视当前属性值变化的回调函数

var person = {
		firstName: 'Taylor',
		lastName: 'Swift',
		get fullName(){
			return this.firstName + ' ' + this.lastName
		},
		set fullName(data){
			var names = data.split(' ')
			this.firstName = names[0]
			this.lastName = names[1]
		}
	}

	console.log(person)
	person.fullName = 'Kristen Stewart'
	console.log(person)

猜你喜欢

转载自blog.csdn.net/Hanhanyoona/article/details/83931785