第22章 高级技巧

1、高级函数

1、安全的类型检测。

typeof,instanceof并非完全可靠。

安全的类型检测:使用Object原生的toString()方法。

function isArray(value){
return Object.prototype.toString.call(value)=="[object Array]";
}

2、作用域安全的构造函数

构造函数内部使用instanceof检查this是否是正确类型的实例。防止属性被加到window对象上。

3、惰性载入函数

作用:多次调用时,避免重复执行能力检测。

方式:①在能力检测后修改函数并返回新函数。②声明函数时创建自执行匿名函数。

4、函数绑定

bind()方法,传入作为this值的对象。返回的是一个函数,call和apply都是对函数的直接调用。

主要用于事件处理程序以及setTimeout()和setInterval()。需要更多的开销。

5、函数柯里化

基本方法:使用一个闭包返回一个函数。

2、防篡改对象

一旦把对象定义为防篡改,就无法撤销了。

1、不可扩展对象

var person={name:"ABC"};
Object.preventExtensions(person);

调用Object.preventExtensions(person)后不能给person对象添加新属性和方法了,但是可以修改和删除已有的成员。使用Object.isExtensible()可以确定对象是否可以扩展。

2、密封的对象

密封对象不可扩展,不可删除,但是可以修改。

Object.seal()

Object.isSealed()

3、冻结的对象

不可扩展,密封,只有定义[[Set]]函数才可写。

Object.freeze()

Object.isFrozen()

3、高级定时器

定时器对队列的工作方式是,当特定的时间过去后将代码插入,但不意外着它立刻执行,而是表示它会尽快执行。

1、重复的定时器

为避免setInterval出现跳过代码的情况,可以使用setTimeout嵌套setTimeout的链式结构。

2、Yielding Processes

运行在浏览器中的JS都被分配了一个确定数量的资源。如果代码运行超过特定的时间或者特定语句数量,就不会继续执行。

数组分块技术:为要处理的项目创建一个队列,然后使用定时器取出下一个要处理的项目进行处理,接着再设置另一个定时器。

一旦某个函数需要花50ms以上的时间完成,那么最好看看能否将任务分割为一系列可以使用定时器的小任务。

3、函数节流

对高频率周期性执行的代码设置间隔,防止消耗过多的资源。

4、自定义事件P616

5、拖放P622

js-JavaScript高级程序设计学习笔记19的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  4. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  5. JavaScript高级程序设计学习笔记--DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Ele ...

  6. Javascript高级程序设计学习笔记一

    看完w3school的javascript的概念,有点基础,开始红皮书的路程,今晚总结前二章的心得. 第一章:javascript简介 重点是javascript的实现是由 ECMAScript(核心 ...

  7. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  8. JavaScript高级程序设计学习笔记第十章--DOM

    1.DOM:文档对象模型,是针对 HTML 和 XML 文档的一个 API(应用程序编程接口). 2.DOM 可以将任何 HTML 或 XML 文档描绘成一个由多层节点构成的结构. 3.文档节点是每个 ...

  9. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

随机推荐

  1. wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)

    首先说几个最常用的关键字,"eq" 和 "=="等同,可以使用 "and" 表示并且,"or"表示或者."!& ...

  2. ORACLE NUMBER类型Scale为0引发的问题

    今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...

  3. Oracle 12.1.0.2 New Feature翻译学习【In-Memory column store内存列存储】【原创】

    翻译没有追求信达雅,不是为了学英语翻译,是为了快速了解新特性,如有语义理解错误可以指正.欢迎加微信12735770或QQ12735770探讨oracle技术问题:) In-Memory Column ...

  4. SQL Like模糊查询一些小知识

    模糊查询: where mc like '值':返回值等同于where mc ='值' where mc like '%值':匹配 名称是 '*值'(以“值”作为结尾)的所有数据,*表示任何值任何长度 ...

  5. android nagative drawer图标跟标题适配

    <?xml version="1.0" encoding="utf-8"?> <resources> <string name=& ...

  6. Sublime Text 技巧

    让sublime text2支持中文 安装Sublime Package Control 在Sublime Text 2上用Ctrl+-打开控制台并在里面输入以下代码,Sublime Text 2就会 ...

  7. Jenkins学习九:Jenkins插件之构建MSBuild

    Jenkins是Java语言编写的,一直好奇是否可以构建NET语言的项目,目前只了解到有一个插件MSBuild支持构建NET项目. 一.Jenkins安装插件MSBuild 二.VS构建CsharpH ...

  8. [转]ASP.NET Core 之 Identity 入门(一)

    本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html 前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里 ...

  9. 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  10. PYTHON解析XML的多种方式效率对比实测

    在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜索后发现,目前应用比较广泛,且效率相对较高的E ...