Vue大佬在JavaScript的“简历”中筛选出一个优秀的人才:Object.defineProperty
var app = new Vue({el: '#app',data: {message: 'Hello Vue!'},methods:{changeMessage(){this.message = "Hi Zhang Brother!"}}})
<div id="app"> {{ message }}</div
Object.defineProperty()
|
|
||
自我介绍:我能修改一个对象的属性或者给这个对象新增不同的属性,并且返回这个对象,就问牛不牛?! |
||
|
|
|
|
|
|
|
|
|
|
需定义或修改的属性的名字 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
prop属性的值是否可以修改 |
|
enumerable |
prop的属性能否被枚举(也就是说如果设置成false,在for...in或者Object.keys()循环中是找不到这个prop的) |
|
|
|
是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable) |
|
|
|
|
function (){} | undefined |
|
|
|
function (newVal){} | undefined |
|
|
||
let testData = {name:'zhangsan',age:10}const monitorData = (data,key,val)=>{Object.defineProperty(data,key,{enumerable:true,configurable:true,get(){console.log("testData getter",val)return val},set(newVal){console.log("testData setter")if(val === newVal)returnconsole.log("testData setter newVal",newVal)val = newVal}})}//检测 testData下的name的数据变化monitorData(testData,'name',testData.name)console.log(testData.name)//-输出--> testData getter zhangsan//-输出--> zhangsan console.log(testData.name) 打印的
