摘要:關(guān)于定時器要記住的最重要的事情是指定的時間間隔表示何時將定時器的代碼添加到隊(duì)列,而不是何時實(shí)際執(zhí)行代碼。多個定時器之間的執(zhí)行間隔會比預(yù)期的小解決辦法處理中數(shù)組分塊,,函數(shù)節(jié)流,實(shí)際進(jìn)行處理的方法實(shí)際執(zhí)行的代碼初始處理調(diào)用的方法
一、高級函數(shù)
安全類型檢測
Object.protitype.toString.call(value)
作用域安全的構(gòu)造函數(shù)
function Person(name, age, job) { if (this instanceof Person) { this.name = name; this.age = age; this.job = job; } else { return new Person(name, age, job); } } // 如果你使用構(gòu)造函數(shù)竊取模式的繼承且不使用原型鏈,這個繼承很可能被破壞 function Teacher (name, age, job, salary) { // this指向非Peroson 返回新的實(shí)例,構(gòu)造函數(shù)中的this屬性并未增長 Person.call(this, name, age, job); this.salary = salary; } // 解決這個問題的方法是,Teacher.prototype = new Person(),此時一個Teacher實(shí)例也是一個Person實(shí)例
惰性載入函數(shù)
在函數(shù)被調(diào)用的時候再處理函數(shù),在第一次調(diào)用的過程中,該函數(shù)會被覆蓋為另一個按合適方式執(zhí)行的函數(shù)
function createXHR () { if (typeof XMLHttpRequest != "undefined) { createXHR = function () { return new XMLHttpRequest (); } } else if (typeof ActiveXObject != "undefined") { createXHR = function () { if (typeof arguments.callee.activeString != "string") { //... } } } else { createXHR = function () { // ... } } return createXHR(); }
在聲明的時候就指定適當(dāng)?shù)暮瘮?shù),利用匿名函數(shù)自運(yùn)行,return一個合適的函數(shù)
函數(shù)綁定
一個簡單的bind函數(shù)
function bind(fn, context){ return function() { return fn.apply(context, arguments) } }
函數(shù)柯里化
函數(shù)的柯里化的基本方法和函數(shù)綁定是一樣的,使用一個閉包返回一個函數(shù),區(qū)別是,當(dāng)函數(shù)被調(diào)用時,還需要傳遞一些參數(shù)
柯里化函數(shù)動態(tài)創(chuàng)建步驟:調(diào)用另一個函數(shù)并為它傳入要柯里化的函數(shù)和必要參數(shù)
function curry(fn){ var args = Array.prototype.slice.call(arguments, 1); return function () { var innerArgs = Array.prototype.slice.call(arguments); var finalArgs = args.concat(innerArgs); return fn.apply(null, finalArgs) } }
es5中的防篡改對象
不可擴(kuò)展對象
Objcect.preventExtensions(obj) // 設(shè)置對象屬性是否可以擴(kuò)展 Objcect.isExtensible(obj) // 返回值為bool值,true即該對象可以擴(kuò)展,false為不可擴(kuò)展
密封的對象
密封對象不可擴(kuò)展,而且已有成員的[ [ Configurable ] ]特性將被設(shè)置為false,這就意味著不能刪除屬性和方法
Object.seal(obj) // 設(shè)置對象是否是密封 Object.isSealed // 返回值為bool值,true即該對象已經(jīng)密封,false為沒有密封
凍結(jié)對象
凍結(jié)的對象既不可以擴(kuò)展,又是密封的
Object.freeze(obj) // 設(shè)置對象是否凍結(jié) Objcet.isForzen(obj) // 返回值為bool值,true即該對象已經(jīng)凍結(jié),false為沒有凍結(jié)
高級定時器
除了主Javascript執(zhí)行進(jìn)程外,還有一個需要在進(jìn)程下次一空閑的時執(zhí)行的代碼隊(duì)列。隨著頁面在其生命周期中的推移,代碼會按照執(zhí)行順序添加到隊(duì)列。
關(guān)于定時器要記住的最重要的事情是:指定的時間間隔表示何時將定時器的代碼添加到隊(duì)列,而不是何時實(shí)際執(zhí)行代碼。
a.重復(fù)的定時器
使用setInterval()創(chuàng)建的定時器確保了定時器代碼規(guī)則地插入隊(duì)列中,這個方式的問題在于定時器代碼可能在代碼再次被添加到隊(duì)列之前還沒有完成執(zhí)行,結(jié)果導(dǎo)致定時器代碼連續(xù)運(yùn)行好幾次,而之間沒有任何停頓,javascript引擎在使用setInterval時,僅當(dāng)沒有該定時器的代碼是才將定時器的代碼添加到隊(duì)列中,但是這樣會導(dǎo)致1、某些間隔時間被跳過。
b.多個定時器之間的執(zhí)行間隔會比預(yù)期的小
// 解決辦法 setTimeout(function () { //處理中 setTimeout(arguments.callee, interval) }, interval)
數(shù)組分塊
function chunk(array, process, context) { setTimeout( function() { var Item = array.shift(); process(item) if (array.length > 0) { setTimeout(arguments.callee, 100) } }, 100) }
函數(shù)節(jié)流
var processor = { timeoutId = null, // 實(shí)際進(jìn)行處理的方法 performProcessing: function() { // 實(shí)際執(zhí)行的代碼 }, // 初始處理調(diào)用的方法 process: function () { clearTimeout(this.timeouId); var that = this; this.timeoutId = setTimeout(function () { that.performProcessing(); }, 100) } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/101511.html
摘要:在本文,我會為你介紹一些用老式來的技巧。使用可以將聚合成組,并且形成嵌套的層級。最后一個壓軸的你可以使用將對象以表格的形式打印出來。自從年雙十一正式上線,累計(jì)處理了億錯誤事件,得到了金山軟件百姓網(wǎng)等眾多知名用戶的認(rèn)可。 譯者按: 我們往往會局限在自己熟悉的知識圈,但也應(yīng)擔(dān)偶爾拓展一下,使用一些不常見而又有用的技巧,擴(kuò)大自己的舒適圈。 原文: 10 Tips for Javascrip...
摘要:謹(jǐn)以此文我在北京一家公司打工兩個月,昨夜露宿街頭我是一名程序員,在北京打工兩個月,如今身上只剩吃碗面條的錢。昨夜在北京寒冷的公園和同事與流浪漢一起露宿一夜,因?yàn)槲覀儽焕习逋锨妨斯べY。我在兩個多月前,前往北京。 你可能不知道的 14 個 JavaScript 調(diào)試技巧 了解你的工具可以在完成任務(wù)的過程中發(fā)揮重大作用。盡管傳言 JavaScript 難以調(diào)試,但是如果你掌握了一些調(diào)試技巧,...
摘要:如果你對函數(shù)式編程有一定了解,函數(shù)柯里化是不可或缺的,利用函數(shù)柯里化,可以在開發(fā)中非常優(yōu)雅的處理復(fù)雜邏輯。同樣先看簡單版本的方法,以方法為例,代碼來自高級程序設(shè)計(jì)加強(qiáng)版實(shí)現(xiàn)上面函數(shù),可以換成任何其他函數(shù),經(jīng)過函數(shù)處理,都可以轉(zhuǎn)成柯里化函數(shù)。 我們經(jīng)常說在Javascript語言中,函數(shù)是一等公民,它們本質(zhì)上是十分簡單和過程化的??梢岳煤瘮?shù),進(jìn)行一些簡單的數(shù)據(jù)處理,return 結(jié)果,...
摘要:層疊樣式表二修訂版這是對作出的官方說明。速查表兩份表來自一份關(guān)于基礎(chǔ)特性,一份關(guān)于布局。核心第一篇一份來自的基礎(chǔ)參考指南簡寫速查表簡寫形式參考書使用層疊樣式表基礎(chǔ)指南,包含使用的好處介紹個方法快速寫成高質(zhì)量的寫出高效的一些提示。 迄今為止,我已經(jīng)收集了100多個精通CSS的資源,它們能讓你更好地掌握CSS技巧,使你的布局設(shè)計(jì)脫穎而出。 CSS3 資源 20個學(xué)習(xí)CSS3的有用資源 C...
摘要:基本概念方法接收一個函數(shù)作為累加器,數(shù)組中的每個值從左到右開始縮減,最終為一個值。例進(jìn)階應(yīng)用使用方法可以完成多維度的數(shù)據(jù)疊加。在該函數(shù)內(nèi)部,則執(zhí)行多維的疊加工作。參考的內(nèi)建函數(shù)數(shù)組方法的高級技巧 基本概念 reduce() 方法接收一個函數(shù)作為累加器(accumulator),數(shù)組中的每個值(從左到右)開始縮減,最終為一個值。 reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括...
閱讀 2222·2021-09-24 10:31
閱讀 3875·2021-09-22 15:16
閱讀 3395·2021-09-22 10:02
閱讀 1010·2021-09-22 10:02
閱讀 1822·2021-09-08 09:36
閱讀 1974·2019-08-30 14:18
閱讀 609·2019-08-30 10:51
閱讀 1863·2019-08-29 11:08