我在整理javascript高級程序設(shè)計的筆記的時候看到面向?qū)ο笤O(shè)計那章,講到對象屬性分為數(shù)據(jù)屬性和訪問器屬性,我們平時用的js對象90%以上都只是用到數(shù)據(jù)屬性;我們向來講解下數(shù)據(jù)屬性和訪問器屬性到底是什么?
數(shù)據(jù)屬性:數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置,在這個位置可以讀取和寫入值.
訪問器屬性:訪問器屬性不包含數(shù)據(jù)值;他們包含一對getter和setter函數(shù)在讀取訪問器屬性時,會調(diào)用getter函數(shù),這個函數(shù)負(fù)責(zé)返回有效的值,在寫入訪問器屬性時,會調(diào)用setter函數(shù)并傳入新值.
這里介紹的重點是訪問器屬性,設(shè)置對象的訪問器屬性只能用es5的Object.defineProrerty()方法,如下例子:
var book={ _year:2004, edition:1 }; Object.defineProperty(book,"year",{ get:function () { return this._year }, set:function (newValue) { if(newValue>2004){ this._year=newValue; this.edition+=newValue-2004; } } }); book.year=2005; alert(book.edition);//2 console.log(book.year);//2005
也就是當(dāng)執(zhí)行book.year=2005的時候其實是執(zhí)行了year中的set方法,當(dāng)執(zhí)行book.year的時候執(zhí)行了year的get方法;
var book={ _year:2004, edition:1 }; Object.defineProperty(book,"year",{ get:function () { console.log("year get") return this._year }, set:function (newValue) { console.log("year set") if(newValue>2004){ this._year=newValue; this.edition+=newValue-2004; } } }); book.year=2005; alert(book.year);
控制臺的提示是:
這個原理就是vue雙向數(shù)據(jù)綁定的原理,我們在vue組件中的data聲明屬性數(shù)據(jù)的時候其實在對象中的已經(jīng)將這個屬性封裝成了訪問器屬性.
每個屬性都有g(shù)et和set方法,在做雙向的數(shù)據(jù)的控制都在get和set方法中,因為無論你是在ready(2.0是mounted了)或是在view中改變值都會觸發(fā)set方法,將新值復(fù)制進(jìn)去,在重新在view中匹配值,當(dāng)然你們有更復(fù)雜的控制操作,get方法著是讓ready中獲取的這個屬性值一直保存最新值.
angular1的雙向數(shù)據(jù)綁定是臟數(shù)據(jù)監(jiān)測,簡單點說就是監(jiān)測新值和舊值有沒有變化,這種方式就要定時監(jiān)測了咯.兩種性能的消耗感覺不在一個層次上的啊.
就好比用html5 Sockets做后臺主動消息推送前端和用js定時器每個5秒發(fā)送請求到后臺捕獲消息的性能差距一樣.
一直以為vue的data層其實就是個擺設(shè),但在api發(fā)現(xiàn)computed屬性之后data層完全可以實現(xiàn)發(fā)送ajax取數(shù)功能,沒必要在全都放到ready(2.0是mounted了)里面,這個ready(2.0是mounted了)可以只負(fù)責(zé)數(shù)據(jù)格式出來,或者控制頁面的動態(tài)效果而已.這js的結(jié)構(gòu)就像后臺MVC那樣層次功能分明清晰.這也只是我突然想到的思路還沒真正應(yīng)用到實際項目中,只是給在用vue的朋友提供個思路.
import data from '../assets/js/data' export default{ data(){ return{ menu:data.menu, inde:"", row:"", clomu:"" } }, computed:{ isfull:function () { alert(111); return 11; } }, mounted(){ }, methods:{ domclick:function (i) { if(this.inde===i){ this.inde=""; }else { this.inde = i; } }, subclick:function (i,o) { this.row=i; this.clomu=o; } } }

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

Angular.js是一種可自由訪問的JavaScript平臺,用于創(chuàng)建動態(tài)應(yīng)用程序。它允許您通過擴(kuò)展HTML的語法作為模板語言,以快速、清晰地表示應(yīng)用程序的各個方面。Angular.js提供了一系列工具,可幫助您編寫、更新和測試代碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。Node.js是一個基于ChromeV8引擎的JavaScript運行環(huán)境,可讓您在服務(wù)器端運行JavaScript代碼。要在Ub

angular中怎么使用monaco-editor?下面本篇文章記錄下最近的一次業(yè)務(wù)中用到的 monaco-editor 在 angular 中的使用,希望對大家有所幫助!

隨著互聯(lián)網(wǎng)的飛速發(fā)展,前端開發(fā)技術(shù)也在不斷改進(jìn)和迭代。PHP和Angular是兩種廣泛應(yīng)用于前端開發(fā)的技術(shù)。PHP是一種服務(wù)器端腳本語言,可以處理表單、生成動態(tài)頁面和管理訪問權(quán)限等任務(wù)。而Angular是一種JavaScript的框架,可以用于開發(fā)單頁面應(yīng)用和構(gòu)建組件化的Web應(yīng)用程序。本篇文章將介紹如何使用PHP和Angular進(jìn)行前端開發(fā),以及如何將它們

本篇文章繼續(xù)Angular的學(xué)習(xí),帶大家了解一下Angular中的元數(shù)據(jù)和裝飾器,簡單了解一下他們的用法,希望對大家有所幫助!

本篇文章帶大家深入了解一下angular的狀態(tài)管理器NgRx,介紹一下NgRx的使用方法,希望對大家有所幫助!

你知道 Angular Universal 嗎?可以幫助網(wǎng)站提供更好的 SEO 支持哦!

本篇文章給大家分享一個Angular實戰(zhàn),了解一下angualr 結(jié)合 ng-zorro 如何快速開發(fā)一個后臺系統(tǒng),希望對大家有所幫助!

身份驗證是任何Web應(yīng)用程序中最重要的部分之一。本教程討論基于令牌的身份驗證系統(tǒng)以及它們與傳統(tǒng)登錄系統(tǒng)的區(qū)別。在本教程結(jié)束時,您將看到一個用Angular和Node.js編寫的完整工作演示。傳統(tǒng)身份驗證系統(tǒng)在繼續(xù)基于令牌的身份驗證系統(tǒng)之前,讓我們先看一下傳統(tǒng)的身份驗證系統(tǒng)。用戶在登錄表單中提供用戶名和密碼,然后點擊登錄。發(fā)出請求后,通過查詢數(shù)據(jù)庫在后端驗證用戶。如果請求有效,則使用從數(shù)據(jù)庫中獲取的用戶信息創(chuàng)建會話,然后在響應(yīng)頭中返回會話信息,以便將會話ID存儲在瀏覽器中。提供用于訪問應(yīng)用程序中受
