摘要:對其的解釋為概述監(jiān)視一個對象的某個屬性是否發(fā)生變化在該屬性變化時立即觸發(fā)指定的回調(diào)函數(shù)語法參數(shù)想要監(jiān)視值是否發(fā)生變化的指定對象的某個屬性的屬性名稱當(dāng)指定的屬性發(fā)生變化時執(zhí)行的回調(diào)函數(shù)在內(nèi)查看其聲明如下可以看到這兩個方法是只針對內(nèi)核的瀏覽器使
MDN 對其的解釋為:
概述: 監(jiān)視一個對象的某個屬性是否發(fā)生變化,在該屬性變化時立即觸發(fā)指定的回調(diào)函數(shù). 語法: object.watch(prop, handler) 參數(shù): prop 想要監(jiān)視值是否發(fā)生變化的指定對象的某個屬性的屬性名稱 handler 當(dāng)指定的屬性發(fā)生變化時執(zhí)行的回調(diào)函數(shù)
在 DHTML.js內(nèi)查看其聲明如下:
可以看到這兩個方法是只針對 Gecko 內(nèi)核的瀏覽器使用的(FF 是使用的 Gecko 內(nèi)核).
wacth 方法有兩個參數(shù),第一個參數(shù)是一個字符串,代表需要監(jiān)視的屬性名,第二個參數(shù)是個回調(diào)函數(shù)
unwatch 方法只有一個參數(shù),代表需要取消監(jiān)視的屬性名.
使用舉例:
var o = {p:1}; o.watch("p", function (id, oldValue, newValue) { console.log("o."+id +" 由 "+oldValue +" 變?yōu)?"+newValue); return newValue;//注意點 }); o.p = 2; o.p = 3; delete o.p; o.p = 4;
輸出結(jié)果為:
這里需要注意的是回調(diào)函數(shù)必須返回一個值,返回的值會覆蓋原有的值(若無返回值默認(rèn)返回的是 undefined),可以返回新值
使用watch 方法來監(jiān)視對象的屬性
//聲明一個類 Person = function (name, age) { this.watch("age",Person.prototype._isValidAssignment); this.watch("name",Person.prototype._isValidAssignment); this.name = name; this.age = age; }; Person.prototype.toString = function () { return this.name + " , " + this.age; }; //定義語義上的私有方法 Person.prototype._isValidAssignment = function(id,oldVale,newValue){ if(id == "name" && (!newValue || newValue.length > 30)){ throw new RangeError("不合法的名字 "+ this); } if(id == "age" && (newValue <0 || newValue >200)){ throw new RangeError("不合法的年齡 "+ this); } return newValue;//重點,必須返回 } will = new Person("will",29); console.log(will); try{ will.name = ""; }catch(e){ console.log(e); } try{ will.age = -4; }catch(e){ console.log(e); }
輸出結(jié)果如下:
最后引入 MDN 的一段描述與注意事項
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/86047.html
摘要:雖然計算屬性在大多數(shù)情況下更合適,但有時也需要一個自定義的偵聽器。當(dāng)某個屬性發(fā)生變化,觸發(fā)攔截函數(shù),然后調(diào)用自身消息訂閱器的方法,遍歷當(dāng)前中保存著所有訂閱者的數(shù)組,并逐個調(diào)用的方法,完成響應(yīng)更新。 雖然目前的技術(shù)棧已由Vue轉(zhuǎn)到了React,但從之前使用Vue開發(fā)的多個項目實際經(jīng)歷來看還是非常愉悅的,Vue文檔清晰規(guī)范,api設(shè)計簡潔高效,對前端開發(fā)人員友好,上手快,甚至個人認(rèn)為在很多...
摘要:當(dāng)某個屬性發(fā)生變化,觸發(fā)攔截函數(shù),然后調(diào)用自身消息訂閱器的方法,遍歷當(dāng)前中保存著所有訂閱者的數(shù)組,并逐個調(diào)用的方法,完成響應(yīng)更新。 編者按:我們會不時邀請工程師談?wù)動幸馑嫉募夹g(shù)細(xì)節(jié),希望知其所以然能讓大家在面試有更出色表現(xiàn)。也給面試官提供更多思路。 showImg(https://segmentfault.com/img/bVbgYyU?w=1200&h=600); 雖然目前的技術(shù)...
摘要:前言是瀏覽器的內(nèi)置腳本語言。避免,在結(jié)構(gòu)生成之前調(diào)用節(jié)點,而產(chǎn)生錯誤 前言 JavaScript是瀏覽器的內(nèi)置腳本語言。當(dāng)網(wǎng)頁中嵌入了JavaScript腳本,瀏覽器加載網(wǎng)頁時,就會執(zhí)行腳本,從而操作瀏覽器,實現(xiàn)各種動態(tài)效果 JavaScript代碼嵌入網(wǎng)頁的方法 1、元素直接嵌入代碼 function sayHello() { alert(hello!); ...
摘要:前言是瀏覽器的內(nèi)置腳本語言。避免,在結(jié)構(gòu)生成之前調(diào)用節(jié)點,而產(chǎn)生錯誤 前言 JavaScript是瀏覽器的內(nèi)置腳本語言。當(dāng)網(wǎng)頁中嵌入了JavaScript腳本,瀏覽器加載網(wǎng)頁時,就會執(zhí)行腳本,從而操作瀏覽器,實現(xiàn)各種動態(tài)效果 JavaScript代碼嵌入網(wǎng)頁的方法 1、元素直接嵌入代碼 function sayHello() { alert(hello!); ...
摘要:畢業(yè)之后就在一直合肥小公司工作,沒有老司機沒有技術(shù)氛圍,在技術(shù)的道路上我只能獨自摸索。于是乎,我果斷辭職,在新年開工之際來到杭州,這里的互聯(lián)網(wǎng)公司應(yīng)該是合肥的幾十倍吧。。。。 畢業(yè)之后就在一直合肥小公司工作,沒有老司機、沒有技術(shù)氛圍,在技術(shù)的道路上我只能獨自摸索。老板也只會畫餅充饑,前途一片迷茫看不到任何希望。于是乎,我果斷辭職,在新年開工之際來到杭州,這里的互聯(lián)網(wǎng)公司應(yīng)該是合肥的幾十...
閱讀 3632·2019-08-30 15:55
閱讀 1423·2019-08-29 16:20
閱讀 3731·2019-08-29 12:42
閱讀 2722·2019-08-26 10:35
閱讀 1124·2019-08-26 10:23
閱讀 3475·2019-08-23 18:32
閱讀 990·2019-08-23 18:32
閱讀 2983·2019-08-23 14:55