兼容性

一个原本是数据属性的属性,代码里还保存着许多与它相关的代码片段。

现在除了一些变故,我们要改变它。

现在把它变成访问器属性。

假设对象为user,此数据属性为age:
写下user.age是为了得到什么?当然是得到具体的年龄。

可这句话执行时,get函数会站出来说,使用user.age实际上就是在调用我啊,我开始发力了,我要把我的产出作为你这句话的结果。

 1 function User(name, birthday) {
 2   this.name = name;
 3   this.birthday = birthday;
 4 
 5   // 年龄是根据当前日期和生日计算得出的
 6   Object.defineProperty(this, "age", {
 7     get() {
 8       let todayYear = new Date().getFullYear();
 9       return todayYear - this.birthday.getFullYear();
10     }
11   });
12 }
13 
14 let john = new User("John", new Date(1992, 6, 1));
15 
16 alert( john.birthday ); // birthday 是可访问的
17 alert( john.age );      // ……age 也是可访问的

如此一来,原属性并没有从对象中直接删除,而是改变了属性的类型,从数据属性变为访问器属性。

posted @ 2020-12-19 11:16  李逍遥701  阅读(205)  评论(0)    收藏  举报