jQuery是一個(gè)Internal DSL的典型的例子,ds.js也是使用函數(shù)式編程的風(fēng)格。
鏈?zhǔn)椒椒ㄕ{(diào)用 eg:$(".mydiv").addClass("flash").draggable().css("color", "blue")
一個(gè)簡(jiǎn)單的列子:
Func = (function() { this.add = function(){ console.log("1"); return this; }; this.result = function(){ console.log("2"); return this; }; return this; }); var func = new Func(); func.add().result();
創(chuàng)建一個(gè)$函數(shù):
html:
(function(){ function _$(els){ this.elements = [];//把那些元素作為數(shù)組保存在一個(gè)實(shí)例屬性中, for(var i= 0, len=els.length; i模擬jquery底層鏈?zhǔn)骄幊蹋?/p>
// 塊級(jí)作用域 //特點(diǎn)1 程序啟動(dòng)的時(shí)候 里面的代碼直接執(zhí)行了 //特點(diǎn)2 內(nèi)部的成員變量 外部無(wú)法去訪問(wèn) (除了不加var修飾的變量) (function(window , undefined){ // $ 最常用的對(duì)象 返回給外界 大型程序開(kāi)發(fā) 一般使用"_"作為私用的對(duì)象(規(guī)范) function _$(arguments){ //實(shí)現(xiàn)代碼...這里僅實(shí)現(xiàn)ID選擇器 // 正則表達(dá)式匹配id選擇器 var idselector = /#w+/ ; this.dom ; // 此屬性 接受所得到的元素 // 如果匹配成功 則接受dom元素 arguments[0] = "#inp" if(idselector.test(arguments[0])){ this.dom = document.getElementById(arguments[0].substring(1)); } else { throw new Error(" arguments is error !"); } }; // 在Function類(lèi)上擴(kuò)展一個(gè)可以實(shí)現(xiàn)鏈?zhǔn)骄幊痰姆椒? Function.prototype.method = function(methodName , fn){ this.prototype[methodName] = fn ; return this ; //鏈?zhǔn)骄幊痰年P(guān)鍵 } // 在_$的原型對(duì)象上 加一些公共的方法 _$.prototype = { constructor : _$ , addEvent:function(type,fn){ // 給你的得到的元素 注冊(cè)事件 if(window.addEventListener){// FF this.dom.addEventListener(type , fn); } else if (window.attachEvent){// IE this.dom.attachEvent("on"+type , fn); } return this ; }, setStyle:function(prop , val){ this.dom.style[prop] = val ; return this ; } }; // window 上先注冊(cè)一個(gè)全局變量 與外界產(chǎn)生關(guān)系 window.$ = _$ ; // 寫(xiě)一個(gè)準(zhǔn)備的方法 _$.onReady = function(fn){ // 1 實(shí)例化出來(lái)_$對(duì)象 真正的注冊(cè)到window上 window.$ = function(){ return new _$(arguments); }; // 2 執(zhí)行傳入進(jìn)來(lái)的代碼 fn(); // 3 實(shí)現(xiàn)鏈?zhǔn)骄幊? _$.method("addEvent",function(){ // nothing to do }).method("setStyle",function(){ // nothing to do }); }; })(window); // 程序的入口 window傳入作用域中 $.onReady(function(){ var inp = $("#inp"); //alert(inp.dom.nodeName); //alert($("#inp")); inp.addEvent("click",function(){ alert("我被點(diǎn)擊了!"); }).setStyle("backgroundColor" , "red"); });
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/89867.html
摘要:函數(shù)式編程,一看這個(gè)詞,簡(jiǎn)直就是學(xué)院派的典范。所以這期周刊,我們就重點(diǎn)引入的函數(shù)式編程,淺入淺出,一窺函數(shù)式編程的思想,可能讓你對(duì)編程語(yǔ)言的理解更加融會(huì)貫通一些。但從根本上來(lái)說(shuō),函數(shù)式編程就是關(guān)于如使用通用的可復(fù)用函數(shù)進(jìn)行組合編程。 showImg(https://segmentfault.com/img/bVGQuc); 函數(shù)式編程(Functional Programming),一...
摘要:為了盡可能提升互通性,已經(jīng)成為函數(shù)式編程庫(kù)遵循的實(shí)際標(biāo)準(zhǔn)。與輕量級(jí)函數(shù)式編程的概念相反,它以火力全開(kāi)的姿態(tài)進(jìn)軍的函數(shù)式編程世界。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著滬江血液的純粹工程:認(rèn)真,是 HTML 最堅(jiān)實(shí)的梁柱;分享,是 CSS 里最閃耀的一瞥;總結(jié),...
摘要:函數(shù)式編程一開(kāi)始我并不理解。漸漸地,我熟練掌握了使用函數(shù)式的方法去編程。但是自從學(xué)習(xí)了函數(shù)式編程,我將循環(huán)都改成了使用和來(lái)實(shí)現(xiàn)。只有數(shù)據(jù)和函數(shù),而且因?yàn)楹瘮?shù)沒(méi)有和對(duì)象綁定,更加容易復(fù)用。在函數(shù)式的中,這些問(wèn)題不復(fù)存在。 譯者按: 當(dāng)從業(yè)20的JavaScript老司機(jī)學(xué)會(huì)函數(shù)式編程時(shí),他扔掉了90%的特性,也不用面向?qū)ο罅?,最后發(fā)現(xiàn)了真愛(ài)啊?。?! 原文: How I rediscov...
摘要:所以我覺(jué)得函數(shù)式編程領(lǐng)域更像學(xué)者的領(lǐng)域。函數(shù)式編程的原則是完善的,經(jīng)過(guò)了深入的研究和審查,并且可以被驗(yàn)證。函數(shù)式編程是編寫(xiě)可讀代碼的最有效工具之一可能還有其他。我知道很多函數(shù)式編程編程者會(huì)認(rèn)為形式主義本身有助于學(xué)習(xí)。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson?。 禮ou-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著滬江血液...
摘要:函數(shù)式編程的哲學(xué)就是假定副作用是造成不正當(dāng)行為的主要原因。函數(shù)組合面向?qū)ο笸ǔ1槐扔鳛槊~,而函數(shù)式編程是動(dòng)詞。尾遞歸優(yōu)化函數(shù)式編程語(yǔ)言中因?yàn)椴豢勺償?shù)據(jù)結(jié)構(gòu)的原因,沒(méi)辦法實(shí)現(xiàn)循環(huán)。 零、前言 說(shuō)到函數(shù)式編程,想必各位或多或少都有所耳聞,然而對(duì)于函數(shù)式的內(nèi)涵和本質(zhì)可能又有些說(shuō)不清楚。 所以本文希望針對(duì)工程師,從應(yīng)用(而非學(xué)術(shù))的角度將函數(shù)式編程相關(guān)思想和實(shí)踐(以 JavaScript 為...
摘要:函數(shù)式編程導(dǎo)論從屬于筆者的前端入門(mén)與工程實(shí)踐。函數(shù)式編程即是在軟件開(kāi)發(fā)的工程中避免使用共享狀態(tài)可變狀態(tài)以及副作用。 JavaScript 函數(shù)式編程導(dǎo)論從屬于筆者的Web 前端入門(mén)與工程實(shí)踐。本文很多地方是講解函數(shù)式編程的優(yōu)勢(shì),就筆者個(gè)人而言是認(rèn)可函數(shù)式編程具有一定的好處,但是不推崇徹底的函數(shù)式編程化,特別是對(duì)于復(fù)雜應(yīng)用邏輯的開(kāi)發(fā)。筆者在應(yīng)用的狀態(tài)管理工具中就更傾向于使用MobX而不是...
閱讀 1298·2021-11-25 09:43
閱讀 1813·2021-09-13 10:25
閱讀 2733·2021-09-09 11:38
閱讀 3632·2021-09-07 10:14
閱讀 1835·2019-08-30 15:52
閱讀 737·2019-08-30 15:44
閱讀 3690·2019-08-29 13:23
閱讀 2068·2019-08-26 13:33