主要有以下办法
- __defineSetter__
- watch
- defineProperty
- get/set关键字
- Proxy
先说结论:
推荐大家使用Proxy
1.__defineSetter__早期时,还没有形成标准。浏览器提供的私有属性,可以使用这个实现后来的defineProperty。
2.watch只有火狐支持,没什么用。
3.defineProperty被广泛使用,好处有:成为了标准。不好处:兼容性,IE9以下不兼容。
4.get/set的好处,代码看起来更好看。不好处:get/set能做的defineProperty都能做,defineProperty能做的更多,兼容性更好。现在通常写在class里,然后构建工具转化为defineProperty。
5.Proxy是ES6的新增功能,是未来的趋势。而且Proxy的兼容性非常好,如果对象的属性是固定的话,是可以使用polyfill的,所以推荐Proxy