js-JavaScript高级程序设计学习笔记19
第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的更多相关文章
- JavaScript高级程序设计---学习笔记(一)
今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...
- javascript高级程序设计学习笔记
javascript高级程序设计,当枕头书已经好久了~zz 现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...
- javascript 高级程序设计 学习笔记
<!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...
- JavaScript高级程序设计---学习笔记(二)
面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...
- JavaScript高级程序设计学习笔记--DOM
DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Ele ...
- Javascript高级程序设计学习笔记一
看完w3school的javascript的概念,有点基础,开始红皮书的路程,今晚总结前二章的心得. 第一章:javascript简介 重点是javascript的实现是由 ECMAScript(核心 ...
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...
- JavaScript高级程序设计学习笔记第十章--DOM
1.DOM:文档对象模型,是针对 HTML 和 XML 文档的一个 API(应用程序编程接口). 2.DOM 可以将任何 HTML 或 XML 文档描绘成一个由多层节点构成的结构. 3.文档节点是每个 ...
- JavaScript高级程序设计学习笔记第一章
作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...
随机推荐
- ionic 使用sqlite
昨天被ionic和sqlite折腾一天,怎么也无法实现读取,后来才发现,原来是codova中的sqliteplugin版本问题. 问题:Database location or iosDatabase ...
- c#获取时间
DateTime.Now.AddDays(10).ToShortDateString().ToString() addDays(整数) 一天前DateTime.Now.AddDays(-1).ToSh ...
- $.parseJson 在 firefox 下返回 null 的问题
最近调查一个浏览器兼容性问题,在 IE, chrome下都运行正常,但是在 firefox 下运行时: $.parseJson(xxx) 返回 null,所以导致了 无法正常运行,调查的结果是因为 返 ...
- 崔用志-微信开发-java版本
崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...
- java实现串口通讯
一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目录下,工程中引入该jar包 3. 将rxtxSe ...
- Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'
新下载的php3.23,本地访问数据库可以,服务器上不行.如下: :( Undefined class constant 'MYSQL_ATTR_INIT_COMMAND' 错误位置 FILE: /u ...
- 项目开发之UML之初识
- java自带工具-jps、jinfo、jstack、jstat、jmap
掌握java自带的这些监控工具,有助与我们很好的分析问题和jvm性能调优秀.收集了些网上整理很好的文章. Java监控工具.调优.调试辅助函数 Java自带的GUI性能监控工具Jconsole以及Ji ...
- [WPF系列]-高级部分 需要区分的东东
ContentControl VS ContentPresenter What's the difference between ContentControl and ContentPresenter ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...