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

原文地址:https://www.cnblogs.com/zczhangcui/p/6207291.html