JavaScript 设置 get/set 两种方法有什么区别?

使用 Object.defineProperty 定义的 getter/setter 和在声明对象时的 get/set 有什么区别。

let obj = {
    $a: 20,
    get a() {
        return this.$a;
    },
    set a(val) {
        this.$a = val;
    }
};
let obj = {
    $a: 20
};
Object.defineProperty(obj, 'a', {
    get: function () {
        return this.$a;
    },
    set: function (v) {
        this.$a = v;
    }
});

个人使用下来似乎差别不大,在打印的时候第二种方法不会显示 a 属性而已。希望有大神解答一下。

阅读 4.3k
1 个回答

没区别。

Object.defineProperty 设置的 getter / setter,最后实际还是被挂到了 get / set 方法上。

只不过 Object.defineProperty 是 ES5 才有的,而前者在 ES5 之前就已经在 Chrome 等浏览器上有了私有的实现。

REF: https://developer.mozilla.org...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏