欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
web前端結構與行為的分離

如今的web開(kāi)發(fā)也需要越來(lái)越接近MVC框架模式,web的前端可視為由結構+表現+行為組成,根據W3C的標準,使用xhtml+css已經(jīng)使得結構和表現成功分離。在網(wǎng)上看到越來(lái)越多被重構過(guò)的網(wǎng)站是件非常令人欣喜的事情,如果現在要讓我再做一個(gè)表格布局的網(wǎng)頁(yè),當我看到那一堆可以被一句CSS代替的表格代碼時(shí),我甚至會(huì )惡心到想吐!標準給掙扎在混沌的淤泥里的我們帶來(lái)了清新空氣,良好重構過(guò)的頁(yè)面也像出淤泥而不染的清蓮,香馨沁人心脾!那么下一步就應該是結構和行為的分離了,因為表現和行為本來(lái)是不相關(guān)的,就算微軟的瀏覽器標準支持一個(gè)我當時(shí)非常喜歡的css里的behavior,但現在看來(lái)表現依然不能包括行為,不應該去代替行為行事。在這個(gè)三角形里,結構可以說(shuō)是重點(diǎn),表現依賴(lài)于結構,行為也依賴(lài)于結構,表現和行為的聯(lián)系相對較少(除了一些特效操作),表現是被結構導入的,于是開(kāi)始思考,行為是否也可以完全由外部導入,在結構即html頁(yè)面里完全看不到一句javascript代碼?

經(jīng)過(guò)本人一番研究,至少一半左右簡(jiǎn)單應用的行為是可以分離開(kāi)的。為什么說(shuō)是一半呢,由于通過(guò)對對象定義的事件函數還存在參數傳遞的一些問(wèn)題,但繞過(guò)這個(gè)障礙實(shí)施全部應用的可行性正在研究中,而且態(tài)勢也在逐漸明朗,將在下文提及。所以答案是肯定的——結構(html)與行為(javascript)可以實(shí)現分離!

下面來(lái)看分離面臨的核心問(wèn)題,一個(gè)我的實(shí)例(為方便調試,js代碼仍寫(xiě)在script標簽里,但其他任何body里的對象都不再添加js代碼):

<html>
<head>
<title>結構與行為分離的測試</title>
<script type=”text/javascript” language=”javascript”>
function showNode(){
var evt=showNode.arguments[0]||window.event;//根據FF和IE的不同取得相應的事件對象
var element=evt.target||evt.srcElement;//根據FF和IE的不同取得事件觸發(fā)對象
var showText=element.innerHTML;
alert(showText);//顯示事件觸發(fā)對象的內容,或者一些事件觸發(fā)對象的相關(guān)操作
}
function initBehavior(){
document.getElementById(”holder”).onclick=showNode;//為特定對象觸發(fā)事件連接函數
}
onload=initBehavior;//頁(yè)面加載完畢后調用函數進(jìn)行行為連接
</script>
</head>
<body>
<div id=”holder”>
<a href=”#”>列表標題</a>
<ul>
<li>列表項1</li>
<li>列表項2</li>
<li>列表項3</li>
<li>列表項4</li>
<li>列表項5</li>
</ul>
</div>
</body>
</html>

函數initBehavior()的作用就是建立一個(gè)操作序列,為每個(gè)html文檔結構中需要使用行為的對象進(jìn)行事件觸發(fā)與相應操作處理函數的連接,即生成行為。如例子中對id為holder的div元素添加的onclick事件函數,同理也可以添加onmouseover,onmouseout……等事件。于是我們分離的第一步完成了,這一步要做的就是重復initBehavior函數里面的內容,添加其他觸發(fā)事件。

接下來(lái)要做的就是具體實(shí)現每個(gè)觸發(fā)函數了,如上例showNode()函數,問(wèn)題的核心也就在這里,因為定義的是事件處理入口,函數中沒(méi)辦法在定義事件的時(shí)候就確定參數,于是參數表就隱式被傳遞了。為什么說(shuō)有參數表,這也是在查閱了網(wǎng)上一些資料才知道的,每個(gè)函數也是一個(gè)對象,函數對象就有一個(gè)屬性是arguments:Array(),而當函數被調用時(shí),參數都是arguments里的元素,這個(gè)大家可以另外做測試。要說(shuō)的是,不同的瀏覽器在這里有一點(diǎn)小小的區別,對于IE,每當一個(gè)事件被觸發(fā)時(shí)他的一個(gè)全局對象window.event就會(huì )接收到信息,在處理函數的參數表里并沒(méi)有體現。而FF則不同,一個(gè)事件觸發(fā)時(shí),則與這個(gè)事件連接的處理函數會(huì )帶有一個(gè)默認的事件參數,作為參數表里的第一個(gè)參數傳遞給處理函數,這里參數表就派上用場(chǎng)了,看上面的程序,由于函數沒(méi)有定義形參,IE解析的參數表里面是空的,所以函數里定義的evt得到的是event的引用,FF則因為事件作為第一個(gè)參數表里的元素也得到一個(gè)事件對象。下一句也就容易理解了,對于不同瀏覽器,FF的事件來(lái)源屬性是target,IE的是srcElement,那么到這里就通過(guò)解析得到事件來(lái)源對象,也就可以對這個(gè)對象進(jìn)行相關(guān)操作了,那么本來(lái)需要從函數傳遞過(guò)來(lái)的對象參數也就不必要了。這里說(shuō)到上面提到的一個(gè)不允許傳遞參數的機制,這個(gè)是在flash的ActionScript里也碰到的,仔細思考了一下,似乎明白了設置這個(gè)機制的道理,因為當一個(gè)事件觸發(fā)函數時(shí),其實(shí)需要傳遞的參數都是在外部暫時(shí)靜態(tài)存在的,那么直接在函數里調用外部的對象或其他數據,也就完成了需求。

說(shuō)是完成了,但心里總是隱隱約約覺(jué)得不妥,好象還是不完美,不過(guò)到這已經(jīng)足夠了,我們的目的是結構與行為的分離,那么已經(jīng)實(shí)現了,收工大吉!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
引用 js在IE和FF的區別 - Neil的日志 - 網(wǎng)易博客
37道WEB前端開(kāi)發(fā)面試題之JavaScript篇章!
jQuery框架簡(jiǎn)單介紹
jQuery 簡(jiǎn)明教程 快速上手
C# 術(shù)語(yǔ)
d3.js:數據可視化利器之 交互行為:響應DOM事件
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久