Vue数据驱动的原理

		属性特性
			第一种类型:值属性
				* 值:value
				* 可修改性(writable):true/false
				* 可枚举性(enumerable):true/false
				* 可配置性(configurable):true/false,设置writable和enumerable是否可修改
			第二种类型:存储器属性
				* configurable
				* enumerable
				* getter:获取
				* setter:设置


		Object.defineProperty()
	 */

	let person = {
			name:'laoxie',//jingjing
			age:18
		}

		let vm = new Vue({
			el:'.root',

			// 把person对象挂载到Vue的实例,自动实现以下操作
			// * 遍历person所有的属性,并把他们设置成存储器属性(setter&getter)
			data:person
		});

		console.log(vm);

		vm.name = 'didi';
		vm.gender = '女';
		//getter&setter

		let lx = {
			name:'laoxie',
			age:18,
			gender:'male',
		}

		// Object.defineProperty(lx,'age',{configurable:false});//
		Object.defineProperty(lx,'age',{writable:false,enumerable:false})
		// Object.defineProperties(lx,{
		// 	age:{writable:false,enumerable:false},
		// 	gender:{
		// 		//...
		// 	}
		// })
		lx.age = 30;

		for(var key in lx){
			console.log(key);//name,age,gender
		}


		// 存储器属性
		Object.defineProperty(lx,'nickname',{
			enumerable:true,
			get(){
				//获取属性值,必须有返回值
				return 100
			},
			set(val){console.log('setter:',val)
				//设置属性值,用于设置其他属性
				this.name = val;
			}
		});

		// lx.nickname;//调用get,得到100
		// lx.nickname = 'laoxie 666';//调用set,把值传入set
		
		
		// 实例化Vue时,会自动遍历data下的属性,并把他们变成存储器属性
		let person2 = {...person};
		for(var key in person2){
			Object.defineProperty(person2,key,{
				get(){
					return person[key]
				},
				set(val){
					person[key] = val;
				}
			})
		}

		person2.name = 'xxx'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值