<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Proxy與Reflect > 英文釋義,分別為 【委托,代理】 【反射】。 **proxy [使用場景](http://pinggod.com/2016/%E5%AE%9E%E4%BE%8B%E8%A7%A3%E6%9E%90-ES6-Proxy-%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF/)** >改變了過去對象監聽的復雜操作,使用proxy可以用一種更優雅的方式實現外部對對象的訪問。 **Reflect [MDN詳解](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect)** >概念:reflect 是es6新增的一個全局對象。顧名思義,反射,類似于Java里面的反射機制。在Java里面,反射是個很頭疼的概念。簡單理解為:通過反射,我們可以在運行時獲得程序或程序集中每一個類型的成員和成員的信息。對于Java來說,程序中一般的對象的類型都是在編譯期就確定下來的,而Java反射機制可以動態地創建對象并調用其屬性,這樣的對象的類型在編譯期是未知的。所以我們可以通過反射機制直接創建對象,即使這個對象的類型在編譯期是未知的。 </br> </br> 理解:有這么一個全局對象,上面直接掛載了對象的某些特殊方法,這些方法可以通過Reflect.apply這種形式來使用,當然所有方法都是可以在 Object 的原型鏈中找到的 **Reflect的好處** - 用一個單一的全局對象去存儲這些方法,能夠保持其它的JavaScript代碼的整潔、干凈。不然的話,這些方法可能是全局的,或者要通過原型來調用。 - 將一些命令式的操作如delete,in等使用函數來替代,這樣做的目的是為了讓代碼更加好維護,更容易向下兼容;也避免出現更多的保留字。 ```javascript //Vue以及angular使用es5 defineProperty,內部響應式數據原理 function Archiver() { var temperature = null; var archive = []; Object.defineProperty(this, 'temperature', { get: function () { console.log('get!'); return temperature; }, set: function (value) { temperature = value; archive.push({ val: temperature }); } }); this.getArchive = function () { return archive; }; } var arc = new Archiver(); arc.temperature; // 'get!' arc.temperature = 11; arc.temperature = 13; arc.getArchive(); // [{ val: 11 }, { val: 13 }] console.log(arc.temperature); /*es6 proxy以及Reflect實現方式*/ module.exports = (object, onChange) => { const handler = { get(target, property, receiver) { try { return new Proxy(target[property], handler); } catch (err) { return Reflect.get(target, property, receiver); } }, defineProperty(target, property, descriptor) { onChange(); return Reflect.defineProperty(target, property, descriptor); }, deleteProperty(target, property) { onChange(); return Reflect.deleteProperty(target, property); } }; return new Proxy(object, handler); }; ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看