Object.defineProperty(obj, prop, descriptor)
第三个参数的解释:
configurable:属性是否可配置(重新defineProperty),是否可删除,默认false
enumerable:属性可否被遍历,默认false
writable:配合value使用,可否修改value,默认false
value:默认undefined
get:默认undefined
set:默认undefined
一般用get、set就好,不用writable和value。
描述符同时存在的情况:
基于Object.defineProperty()和发布订阅实现的数据劫持
// 观察者(劫持数据)
class Observer{
constructor(data){
this.data = data;
// 传入的是个数组或js对象才进行劫持
Observer.checkDataType(this.data) ? this.init(this.data) : null;
}
// 检测数据类型是否是数组或js对象
static checkDataType(data){
return Object.prototype.toString.call(data) === '[object Object]' || Object.protot