摘要:最近在讀這本評價頗高的語言精粹,其作者是的創造者,在業界頗有名氣。
最近在讀這本評價頗高的《JavaScript語言精粹》,其作者Douglas Crockford 是JSON的創造者,在業界頗有名氣。以下是閱讀過程中認為比較有用的摘錄的代碼,希望能對各位有所啟發
自定義的method方法Function.prototype.method = function(name,func){//擴展Function對象,為Function對象,添加method方法,參數1是函數名字,參數2是添加的函數體 if(!this.prototype[name]){ this.prototype[name] = func; } return this; } Number.method("integer",function(){//為Number對象擴展方法integer return Math[this < 0 ? "ceil" : "floor"](this);//number小于0,采用Math.ceil,大于Math.floor,調用方法,傳入的實參this即number本身 }) document.writeln((-10/3).integer())//-3 String.method("trim",function(){//為String對象擴展trim方法 return this.replace(/^s+|s+$/g,"")//正則前起空格,后起空格,全局匹配 }) document.writeln(" neat ".trim())模塊-閉包模擬
道格拉斯用閉包來實現模塊- 提供接口卻隱藏狀態與實現的函數/對象
//deentityfy= 尋找字符串的字符實體并轉換為對應的字符 String.method("deentityify",function(){ //映射表 var entity = { quot : """, lt : "<", gt : ">" }; return function(){//返回函數攜帶entity return this.replace(/&([^&;]+);/g,function(a,b){ //a為 匹配到的字符串,b為匹配組內 var r = entity[b]; return typeof r === "string" ? r : a; }); }; }()//自執行,作者的目的是返回匿名函數 攜帶entity 的閉包 ); "<">".deentityify()緩存(記憶)
fibonacci數列,前一種算法計算了453次,后一種算法調用了29次
//記憶 //不好的例子 var fibonacci = function(n){ return n<2 : fibonacci(n-1) + fibonacci(n-2); } //好的例子 var fibonacci = function(){ var memo = [0,1]; var fib = function(n){ var result = memo[n]; if(typeof result !== "number"){ result = fib(n-1) + fib(n-2); memo[n] = result; } return result; } return fib; }(); //執行 for(var i = 0; i <= 10; i += 1){ document.writeln("http:// "+i+": "+fibonacci(i)); } //執行過的會緩存到fib閉包的memo數組里arguments
//利用arguments實現不定參數的相加 var sum = function (){ var i,sum = 0; for(i=0;i關于對象和類的實現 這里有一些不理解
//new 關鍵字的實現 Function.method("new",function(){ //創建新對象,繼承自構造器的原型對象 var that = Object.create(this.prototype) //調用構造器, var other = this.apply(that,arguments) return (typeof other == "object" && other) || that; }) if(typeof Object.create !== "function"){//Object.create ESC5 引入,為不支持的實現object.create Object.create = function(o){ var F = function(){};//創建新函數對象 F.prototype = o;//設置原型 return new F();//通過new 返回新F } } Function.method("inherits",function(Parent){ this.prototype = new Parent(); return this })遞歸//利用遞歸實現dom遍歷的方法 var walk_the_DOM = function walk(node, func){//dom 遍歷 func(node);//調用func,傳入node node = node.firstChild;//更改node為其第一個子元素,如果沒有意味著終點 while (node) {//如果有子元素,為子元素執行walk函數本身,其node參數為之前node的第一個子元素,while循環所有子元素 walk(node, func); node = node.nextSibling;//while循環此下所有子元素 } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78077.html
摘要:在中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了語言精粹中方法的一章,想記錄下書上的代碼,以便加深印象。方法移除數組中的第一個元素并且放回該元素。 在js中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了《javascript語言精粹》中方法的一章,想記錄下書上的代碼,以便加深印...
摘要:函數調用一個函數會暫停當前函數的執行,控制權轉交給新的函數。語句可以使函數提前返回,中斷函數的運行。如果沒有指定返回值,則返回。任何語句都會返回值,在瀏覽器面板執行語句后的值就是返回值。在情況下不能正常工作。 對象 對象屬性的名字可以是空字符串,屬性值可以是undefined(原文為屬性值可以是除undefined以外的任何值,但是測試可以為undefined)。 嘗試從undefi...
摘要:的內置函數整理了一些語言精粹的方法一章的整理出的的內置方法之后還會整理標準入門的新添加的方法整理這些作用一方面是更好的理解記憶另一方面是對于類數組可以使用原型鏈的調用即可中的一些函數輸出的為的結果因此的作用是連接數組當然可以是數字也會加入到 Javascript的內置函數(ES5) 整理了一些Javascript語言精粹的方法一章的整理出的ES5的內置方法; 之后還會整理ES6標準入門...
摘要:遞歸函數就是會直接或者間接地調用自身的一種函數。一般來說,一個遞歸函數調用自身去解決它的子問題。書上第二個例子是說遞歸函數可以非常高效率的操作樹形結構,比如。有一些語言提供了尾遞歸的優化。好運的是,給我們帶來了尾遞歸,詳細迎接使用尾遞歸。 遞歸函數就是會直接或者間接地調用自身的一種函數。遞歸是一種強大的編程技術,它把一問題分解為一組相似的子問題,每一個都用一個尋常解去解決。一般來...
摘要:語言精粹讀書筆記第四章函數函數字面量函數字面量包含個部分第一部分,保留字第二部分,函數名,它可以被忽略。這個超級延遲綁定使得函數對高度復用。構造器調用模式一個函數,如果創建的目的就是希望結合的前綴來調用,那它就被稱為構造器構造。 《JavaScript 語言精粹》 讀書筆記 第四章 函數 Functions 函數字面量 函數字面量包含4個部分: 第一部分, 保留字 function...
閱讀 1323·2019-08-30 15:44
閱讀 2033·2019-08-30 13:49
閱讀 1664·2019-08-26 13:54
閱讀 3498·2019-08-26 10:20
閱讀 3288·2019-08-23 17:18
閱讀 3306·2019-08-23 17:05
閱讀 2140·2019-08-23 15:38
閱讀 1025·2019-08-23 14:35