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)return
console.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) 打印的