Object.defineProperty
来源:3-3 监听data变化的核心API是什么
齊帥
2021-03-29 17:30:35
老師請問Object.defineProperty這個東西是JS的原生方法嗎?所以我們是在這個方法上定義他的get跟set來達到監聽的效果嗎?可否詳細解釋一下這個方法,因為完全不了解此方法是個什麼東西....
1回答
同学你好,对于你的问题解答如下:
1、是的,Object.defineProperty是js提供的原生方法。
2、Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
(1)语法:
Object.defineproperty( object,‘propName’ ,descriptor);
(2)参数详解:
object :要定义属性的对象,返回的也是
propName :要定义或修改的属性的名称。
descriptor:要定义或修改的属性描述符
(3)重点了解下该方法如何监测数据,配合get和set方法实现数据绑定。可以结合注释测试理解下面的代码示例:
var obj = {}
const res = Object.defineProperty(obj, 'age', {
get() {
console.log('触发了get方法...')
return age;//返回age的值
},
set(val) {
console.log('触发了set方法...')
age = val // 给age设置值
}
})
// Object.defineProperty()方法在obj对象添加了一个新属性age,并返回该对象
console.log(res)
// 给age属性设置值时,默认会触发set方法,,此时控制台会输出'触发了set方法...'
obj.age = 18
// 访问age属性时,默认会触发get方法,此时控制台会输出'触发了get方法...'
console.log(obj.age)控制台打印结果如下:

祝学习愉快~