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