鍍金池/ 問答/HTML/ es6的proxy和getter/setter區(qū)別是什么?

es6的proxy和getter/setter區(qū)別是什么?

我是否可以理解為,getter和setter設置得粒度小,是針對某個特定的,存在的屬性設置的
而proxy粒度更大,即使是將要設置一個還未存在的屬性時,就會被get/set攔截。(當然proxy提供了很多方法 只討論get set)
不考慮兼容性問題,是不是用proxy做數據的綁定比getter/setter更簡潔,更優(yōu)雅一些呢?

回答
編輯回答
貓館

功能不一樣,針對的問題不一樣。

getter/setter 是設計對象對外暴露的計算屬性用的,是對象本身有意而為之,讓一個屬性訪問像調用一個方法一樣, 對象內部能監(jiān)控某個屬性的訪問,對外又像一個普通屬性一樣。Proxy是設計模式的實現,其意圖是先有一個對象,你用 proxy 在上面加了一層代理,被代理對象本身是不知情它的屬性訪問被人監(jiān)控了

當然像 Vue 一樣,它可以用 defineProperty setter/getter 來實現 Proxy 類似的功能,但是終歸有 HACK 的味道在里面。

不是說奇技淫巧不好,但是一定要分得清什么是順理成章的實現,什么是奇技淫巧。

2017年5月1日 08:32
編輯回答
墨染殤

我個人也覺得proxy要更好一點,只是現在的兼容性還比較差吧。

Vue 3.0 就準備用proxy來做數據綁定。

2017年5月19日 13:07