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