Object.defineProperty 实现双向数据绑定

语法

Object.defineProperty(obj, prop, descriptor)

参数

  • obj 要在其上定义属性的对象。
  • prop 要定义或修改的属性的名称。
  • descriptor 将被定义或修改的属性描述符。

返回值

被传递给函数的对象。

示例

var person= {};
Object.defineProperty(person, "name", {
  value: '名字'
})
console.log(person.name); // 名字

双向绑定 set 和 get

var person = {};
Object.defineProperty(person, 'name', {
    set: function(newValue) {
        console.log('赋值操作, 赋值' + newValue);
    },
    get: function() {
        console.log('取值操作');
        return 2;
    }
});
a.name = 'TRE';    // 赋值操作,赋值TRE
a.name;       // 取值操作TRE

Object对象有一个freeze的方法,用于实现对象属性和方法的不可更改

// 使用方法:
const arr = [1,2,3,4];
Object.freeze(arr);  // 变量arr不可更改
arr.push(5);  // 报错:不能添加属性

Object.definePropperty也可以实现规定变量的不可更改

const obj = { key: 'chris', vlaue: 'person' };
Object.defineProperty(obj, 'key', {
    configurable: false,   // 不可删除
    writable: false, // 不可写
});

注:在 descriptor 中不能同时设置访问器(get 和 set)和 wriable 或 value,否则会错,就是说想用 get 和 set,就不能用 writable 或 value 中的任何一个。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注