第22章 高级技巧

1、高级函数

1.1安全的类型检测

测试某个值是不是原生函数或正则表达式

function isFunctionivalue){
return object.prototype.toString.call(value) == "[object Function]";
}
function isRegExp(value){
return object.prototype.tostring.call(value) s= "[object RegExp]";
}
1.2作用域安全的构造函数

作用域安全的构造函数在进行任何更改前,首先确认this对象是正确类型的实例。

1.3惰性载入函数

表示函数执行的分支仅会发生一次。实现方式为:第一种是在函数被调用时在处理函数,第二种就是在声明函数时就指定适当的函数。其优点是在执行分支代码是会牺牲一点性能

1.4函数绑定

一个简单的bind()函数接受一个函数和一个环境,并返回一个在给定环境中调用给定函数的函数,并且将所有参数原封不动传递过去。语法如下:

function bind(fn, context) {
return function ( {
return fn.apply(context, arguments);
};
}
1.5函数柯里化

它用于创建已经设置好了一个或多个参数的函数。函数柯里化的基本方法和函数绑定是--样的:使用一个闭包返回一个函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些传人的参数。

2、防篡改对象

一旦把对象定义为防篡改,就无法撤销了
不可扩展的对象,不允许给对象添加新的属性或方法。
密封的对象,也是不可扩展的对象,不允许删除已有的属性和方法。
冻结的对象,也是密封的对象,不允许重写对象的成员。

3、高级定时器

使用setTimeout()和setInterval()创建的定时器

3.1重复的定时器

使用setInterval()创建的定时器确保了定时器代码规则地插入队列中。这个方式的问题在于,定时器代码可能在代码再次被添加到队列之前还没有完成执行,结果导致定时器代码连续运行好几次,而之间没有任何停顿。
这种重复定时器的规则有2点问题:(1)某些间隔会被跳过;(2)多个定时器的代码执行之间的间隔可能会比预期的小。

5、拖放

拖放对于桌面和Web应用都是一个非常流行的用户界面范例,它能够让用户非常方便地以一种直观的方式重新排列或者配置东西。在JavaScrip中可以使用鼠标事件和一些简单的计算来实现这种功能类型。将拖放行为和自定义事件结合起来可以创建一个可重复使用的框架,它能应用于各种不同的情况下。

小结

JavaScript中的函数非常强大,因为它们是第一类对象。使用闭包和函数环境切换,还可以有很多使用函数的强大方法。可以创建作用域安全的构造函数,确保在缺少new操作符时调用构造函数不会改变错误的环境对象。

你可能感兴趣的:(第22章 高级技巧)