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