vue雙向數據綁定的原理

有關雙向數據綁定的原理

最近兩次面試的時候,被問到了vue中雙向數據綁定的原理,因為初學不精,只是使用而沒有深入研究,所以答不出來。之后就在網上查找了別人寫的博客,學習一下。

下面是博客園一篇博客,以及MDN上講解Object.defineProperty()方法的地址。

文章鏈接:vue的雙向綁定原理及實現
Mozilla 開發者服務:Object.defineProperty()

因為內容比較長,就不轉載了,只貼個連接在這里,有興趣的可以直接點擊鏈接訪問。

這里簡單說一下個人的理解。

vue實現雙向數據綁定的原理就是利用了 Object.defineProperty() 這個方法重新定義了對象獲取屬性值(get)和設置屬性值(set)的操作來實現的。

在MDN上對該方法的說明是:Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 并返回這個對象。

它接收三個參數,要操作的對象,要定義或修改的對象屬性名,屬性描述符。重點就是最后的屬性描述符。

屬性描述符是一個對象,主要有兩種形式:數據描述符和存取描述符。這兩種對象只能選擇一種使用,不能混合兩種描述符的屬性同時使用。上面說的get和set就是屬于存取描述符對象的屬性。

然后我們可以通過在存取描述符中的get和set方法內寫入自定義的邏輯來實現對象獲取屬性和設置屬性時的行為。

var keyValue = 1;
var obj = {};
Object.defineProperty(obj,'key', {enumerable: true,configurable: true,get: function(){return keyValue;},set: function(newValue){keyValue = newValue;console.log(`keyValue的值已發生改變,目前的值是:${keyValue}`);}
});obj.key; // 1obj.key = 'obj對象的key屬性已經綁定了變量keyValue的值';
// keyValue的值已發生改變,目前的值是:obj對象的key屬性已經綁定了變量keyValue的值
// "obj對象的key屬性已經綁定了變量keyValue的值"keyValue; // "obj對象的key屬性已經綁定了變量keyValue的值"

上面這個例子就是改變了對象獲取屬性及設置屬性的默認行為。

對象obj獲取屬性key的值時,會觸發上面的get方法,得到的是變量keyValue的值,然后當重新設置key的值時,觸發set方法,會將變量keyValue的值改變為設置的值,如此就實現了一個簡單的雙向綁定:改變keyValue,obj.key得到的值也會改變,重新設置obj.key,keyValue一樣會隨之改變。

當然,vue的雙向綁定實際更復雜,但最基本的原理就是基于Object.defineProperty()方法改變數據存取的默認行為來實現的。

轉載于:https://www.cnblogs.com/wayowe/p/7779557.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

求職網站總結

最近忙著要找份工作。畢業半年多就辭職,也是尷尬。 這里記錄一些求職網站和找工作的一些經驗。主要參考了三個知乎問題:怎么在互聯網上找工作?,招聘網站,哪個靠譜?和哪個求職網站(app&#xff0…

FTP命令解析

FTP命令詳解FTP命令是Internet用戶使用最頻繁的命令之一,不論是在DOS還是UNIX操作系統下使用FTP,都會遇到大量的FTP內部命令。熟悉并靈活應用FTP的內部命令,可以大大方便使用者,并收到事半功倍之效。   FTP的命令行格式為&…

深入Java內存模型

你可以在網上找到一大堆資料讓你了解JMM是什么東西,但大多在你看完后仍然會有很多疑問。happen-before是怎么工作的呢?用volatile會導致緩存的丟棄嗎?為什么我們從一開始就需要內存模型? 通過這篇文章,讀者可以學習到足…

Matlab 使用GPU加速 轉載

在matlab中使用GPU加速,來加速矩陣運算。 首先如前面所說,并不是所有GPU都能在maltab中進行加速的,貌似只有NVDIA的顯卡可以吧。 硬件:GeForce GTX 980 軟件:Matlab 2015a (Matlab 2012以后的版本才帶有GP…

數字后端——可制造性設計

隨著集成電路制造工藝技術的迅速發展,集成電路集成度迅速攀升,制造流程及工藝步驟日趨復雜,工藝尺寸也在不斷縮小。集成電路可制造性設計(Design For Manufacturability,DFM) 以直接提升集成電路芯片的良品率及降低芯片…

Cloudstack安裝(二)

Cloudstack安裝 官方文檔參考: http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.9/qig.html#environment Cloudstack主要分Management和Agent兩部分。 系統版本:CentOS 6.8 Management: cpu1,ram 2048M…

Pycharm 輸出中文或打印中文亂碼現象的解決辦法

轉載地址:https://www.cnblogs.com/Bro-Young/p/5920884.html 1. 確保文件開頭加上以下代碼: 1 # -*- coding:utf-8 -*- 還可以加上 1 import sys 2 reload(sys) 3 sys.setdefaultencoding(utf-8) 確保以下。 如果還是沒有解決中文亂碼,那么進…

計算機系統結構——概述

計算機的實現包括兩個方面:組成和硬件。組成一詞包含了計算機設計的高階內容,例如存儲器系統,存儲器互連,設計內部處理器 CPU (中央處理器——算術、邏輯、分支和數據傳送功能都在內部實現)。有時也用微體系…

BestCoder Round #91 1001 Lotus and Characters

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid6011 題意: Lotus有nn種字母,給出每種字母的價值以及每種字母的個數限制,她想構造一個任意長度的串。 定義串的價值為:第1位字母的價值*1第2位字母的價值*2第3位字…

Calendar的那些神坑

參考我的博客:http://www.isedwardtang.com/2017/08/31/java-calendar-bug/轉載于:https://www.cnblogs.com/EdwardTang/p/7476781.html

mkyaffs2image的用法

在Ubuntu中第一次使用mkyaffs2image命令時,會提示 mkyaffs2image:找不到命令 還需要安裝mkyaffs2image http://code.google.com/p/fatplus/downloads/detail?nameyaffs2-source.tar&can2&q 下載yaffs2-source.tar 解壓后,進入util…

全景圖像拼接——基本流程

圖像拼接技術是數字圖像處理技術一個重要的研究方向,它即是將兩幅或多幅相互有部分重疊的場景照片拼接成具有超寬視角、與原始圖像接近且失真小、沒有明顯縫合線的高分辨率圖像。可以很好地解決廣角鏡、魚眼鏡頭等全景圖獲取設備的不足。如下圖: 圖像拼接產生的圖像不…

SmartRaiden 和 Lighting Network 進行去中心化跨鏈原子資產交換

SmartRaiden 和 Lighting Network 進行去中心化跨鏈原子資產交換 前言 如果能夠進行以太坊和比特幣跨鏈原子資產交換,是不是一件很酷的事情? 目前鏈下的擴容方式有很多,最廣為人知的就是比特幣的閃電網絡和以太坊的雷電網絡,今天我…

WPF 帶CheckBox、圖標的TreeView

WPF 帶CheckBox、圖標的TreeView 在WPF實際項目開發的時候,經常會用到帶CheckBox的TreeView,雖然微軟在WPF的TreeView中沒有提供該功能,但是微軟在WPF中提供強大的ItemTemplate模板功能和自定義樣式,那我們可以自己寫一個這樣的控…

win32框架,GDI圖形編程寫一個HelloWorld游戲_c語言

1.如圖,實現功能: Hello World!字符串跟隨鼠標移動鼠標左擊Hello World!顏色為紅色鼠標右擊Hello World!顏色為藍色鼠標滾輪滾動改變Hello World!顏色的RGB中的G值 2.實現工具: vs20133.實現步驟: 新建一個win32項目 如圖,看到HelloWorldGame.cpp中 _tWinMain()的函…

全景圖像拼接——圖像融合

圖像融合技術就是將配準過后的圖像融合成一幅寬視角、大場景的圖像。但由于圖像采集過程中各種因素的影響,例如光照、角度、距離等,從而導致圖像間的光照不均勻、顏色上不連續。 經過配準以后,參考圖像和輸入圖像已經在同一個坐標系下,如果只是取某一幅圖像的信息或者簡單地…

極詳細的ECC講解 -OOB與ECC

http://blog.csdn.net/dongzhichen/article/details/8249228 詳細的ECC講解 -OOB與ECC 在網絡編程中 OOB(out of band)帶外數據 在MTD設備中 OOB 如下所示: http://www.cnblogs.com/bcxx_qin/archive/2009/06/11/1501271.html 極詳細的ECC…

前端進階(8) - 前端開發需要了解的工具集合:webpack, eslint, prettier, ...

前端開發需要了解的工具集合:webpack, eslint, prettier, ... 前端開發需要了解的一些工具,這些工具能夠幫助你在項目開發中事半功倍。 1. nrm: npm registry 管理器 registry: npm 遠程倉庫的地址。 由于眾所周知的原因,npm 官方倉庫在國內特…

CMOS圖像傳感器——TOF 圖像傳感器

一、3D成像技術概述 圖像傳感器一直以來都是人類研究的熱點。但隨著當代科學技術發展, 人類對于傳統的 2D 圖像傳感器的要求越來高,不僅期望著更高分辨率,更快速度,更大的動態范圍,人類加希望能夠獲得物體深信息,但是 2D 成 像技術現在已經不能滿足人類的需求,所以應運…

AndroidStudio創建jinLibs文件夾

在文件中的buildTypes節點下添加 sourceSets.main { jniLibs.srcDir libs } 如圖 轉載于:https://www.cnblogs.com/kim-liu/p/7479360.html