摘要:在這里講到的很多也許只和程序對于工作機制的操作有關,但是作為初探也許也就足夠了。一般情況下還有空字符串都會被判斷成。面向特征編程面向特征編程的全稱是。
引子
元編程會有如下的定義:
在這里講到的很多也許只和程序對于工作機制的操作有關,但是作為初探也許也就足夠了。 鑒于我也是邊學邊寫的這篇文章,如果有謬誤之處,還請指出。
創(chuàng)建帶有默認參數(shù)的函數(shù)function repeat(func, times) { times = (Object.prototype.toString.call(times) === "[object Undefined]")?1:times; for(var i = 0; i < times; i++){ func(); } }
在函數(shù)中使用 Object.prototype.toString.call(times) 是為了解決 javascript 判斷值為空的問題,使用這種寫法才會比較的安全。一般情況下 false, 0, undefined, null 還有 空字符串 都會被判斷成 false。
創(chuàng)建自優(yōu)化的行數(shù)在瀏覽器的實現(xiàn)上會有許多的不同,有時候就需要使用分支。一般情況下都是監(jiān)測需要調用的對象或者屬性是否存在,進而進行下一步的操作,像下面的一樣:
function addEvent(elem, type, func){ if (document.addEventListener) { elem.addEventListener(type, func); } else { elem.attachEvent(type, func); } }
雖然這段代碼可能還有很多其它的問題,但是這段代碼每次在執(zhí)行時都會進行一次判斷,然而理論上應該可以做到只在第一次運行的時候進行判斷: 當?shù)谝淮握{用的時候,針對特定的瀏覽器去將自己重寫成另外的一個版本 :
function newAddEvent (elem, type, func) { if (document.addEventListener){ newAddEvent = function(element, type, func){ element.addEventListener(type, func); } } else { newAddEvent = function(element, type, func){ element.attachEvent(type, func); } } newAddEvent(elem, type, func); }
在這個函數(shù)中,第一次調用的時候會進行判斷支持的方法類型,然后就會替換掉原來函數(shù)的內容,最后都會執(zhí)行新的函數(shù)。雖然這個是一個簡單的例子,但是可以把它引申并且使用到其它復雜的環(huán)境中去,這樣就可以提高運行的效率了。
面向特征編程(AOP)面向特征編程的全稱是: Aspect-oriented Programming。面向特征編程本質上就是使用函數(shù)執(zhí)行前后的代碼去擴展當前的函數(shù),而不是使用繼承的方式去擴展。
在調試一段代碼的時候,需要在這個代碼被調用的時候寫一些日志,包括 傳入的參數(shù)以及函數(shù)調用之后的返回值,并且這樣不會影響到函數(shù)的正常執(zhí)行 ,我們可以這樣寫:
Bar = { foo: function(){ ... } }; Bar.foo = Bar.foo.debug(function(original, args){ var _r; console.log(args); _r = original(args); console.log(_r); return _r; });
(注: 此處的參數(shù)部分簡略寫了,不要在意這些細節(jié)~) 我在這里擴展了Function的prototype的方法,將原始函數(shù)作為第一個參數(shù)傳入,其實還可以稍加改變,在新的一個函數(shù)上進行這種包裝。 接下來我們來看看debug的實現(xiàn):
Function.prototype.debug = function(debugger) { var _selfMethod = this; // 原始方法的引用 return function(){ var args = []; for (var i = 0, argsLength = arguments.length; i < argsLength; i++) { args.push(arguments[i]); } return debugger.apply(this, [_selfMethod.bind(this)].concat(args)); } };
這段代碼首先保存了原始函數(shù)的一個引用,然后將參數(shù)傳入debugger并使用apply執(zhí)行。
第一次在segmentFault寫blog,也是算對自己的一種鞭策吧,記錄一些所學習的知識,分享一寫學習的心得。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77955.html
摘要:函數(shù)式編程是一種以函數(shù)為基礎的編程方式和代碼組織方式,從程序員的思路上來說,就是將程序拆分并抽象成多個函數(shù),再組裝回去。在這門語言中,函數(shù)是一等公民,函數(shù)可以作為函數(shù)的參數(shù),函數(shù)也可以返回一個函數(shù),因此適合函數(shù)式編程風格。 函數(shù)式編程 ( Functional Programming ) 是一種以函數(shù)為基礎的編程方式和代碼組織方式,從程序員的思路上來說,就是將程序拆分并抽象成多個函數(shù),...
摘要:以我們的程序為例,就是以為產生了一個名為的新類型,改類型的實現(xiàn)由給出,而就包含了通過返回的這個方法。從中找到這些類并一一執(zhí)行測試。 先以一個大牛的一段關于Python Metapgramming的著名的話來做開頭: Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder ...
摘要:前言繼續(xù)向下看廖大教程,看到了函數(shù)式編程這一節(jié),當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 前言 繼續(xù)向下看廖大教程,看到了函數(shù)式編程這一節(jié),當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 函數(shù)式編程 上學期有上一門叫 人工智能 的課,老師強行要我們學了一個叫做 prolog 的語言,哇那感覺確實難受,思維方式完全和之前學過的不一樣,...
摘要:六文件類型與目錄結構支持很多文件類型,其中非常重要的文件類型有普通文件,目錄文件,鏈接文件,設備文件,管道文件,套接字文件等。套接字文件套接字文件被用于網絡進程之間的通信,既可以使臺不同的機器進行通信,也可以用于本機的網絡程序。一、Linux簡介類Unix系統(tǒng): Linux是一種自由、開放源碼的類似Unix的操作系統(tǒng)Linux內核: 嚴格來說,Linux這個詞本身只表示Linux內核Linu...
閱讀 1388·2021-11-24 09:38
閱讀 2089·2021-09-22 15:17
閱讀 2385·2021-09-04 16:41
閱讀 3477·2019-08-30 15:56
閱讀 3516·2019-08-29 17:19
閱讀 1975·2019-08-28 18:09
閱讀 1253·2019-08-26 13:35
閱讀 1715·2019-08-23 17:52