高级技巧
- 使用JavaScript有多种风格,一般来讲,要么使用过程方式,要么使用面向对象方式,鉴于其天生的动态特性,还有更复杂和有趣的模式
高级函数
安全的类型检测
- JavaScript内置的类型检测机制并非完全可靠
Safari在对正则表达式应用typeof操作符时会返回"function"
instanceof操作符在存在多个全局作用域(比如一个页面包含多个框架)的情况下会出很多问题 - 在Web开发中能够区分原生与非原生JavaScript对象非常重要,这样能确切地知道某个对象到底有哪些功能,但在这方面,由于浏览器开始原生支持JSON对象了,很难确定页面中的JSON对象是不是原生的
- 解决上述问题的办法
(以后再写😈)
作用域安全的构造函数
- 构造函数就是一个使用new操作符调用的函数,当使用new调用时,构造函数内用到的this对象会指向新创建的对象实例,问题出在没有使用new操作符调用构造函数的情况:
this对象是在运行时绑定的,将构造函数作为普通函数调用时,this就会映射到全局对象window上,导致错误对象属性的意外增加或修改 - 解决上述问题的办法是创建一个作用域安全的函数,作用域安全的构造函数在进行任何更改前,首先确认this对象是正确类型的实例,如果不是,就创建新的实例并返回
- 实现这个模式后,就锁定了可以调用构造函数的环境,如果使用构造函数窃取模式的继承且不使用原型链,这个继承会被破环,解决这一问题的办法(以后再讲😈)
- 推荐作用域安全的构造函数作为最佳实践
惰性载入函数
- 浏览器间的差异是我们不得不使用大量的if语句来检测,如果浏览器支持这种能力,这样的测试就变得没必要了,为了使这种检测不必每次执行,提高代码的运行速度,使用成为惰性载入的技巧(更多详情以后再讲🐴)
函数绑定
- 函数绑定要创建一个函数,可以在特定的this环境中以指定参数调用另一个函数,该技巧常常和回调函数与事件处理程序一起使用,以便在将函数作为变量传递的同时保留代码执行环境
- ECMAScript5定义了一个原生的
bind()
方法,简化了函数绑定
函数柯里化(function currying)
- 用于创建已经设置好了一个或多个参数的函数
- 基本方法与函数绑定一样:使用闭包返回一个函数
- 柯里化函数是动态创建的:调用另一个函数并为它传入要柯里化的函数和必要参数
- 柯里化函数和绑定函数都提供了强大的动态函数创建功能
防篡改对象(tamper-proof object)
- JavaScript中任何对象都可以被在同一环境中运行的代码修改,这一共享的特性可能会让开发人员意外地修改别人的代码,设置用不兼容的功能重写原生对象,ECMAScript5致力于解决这个问题,可以让开发人员定义防篡改对象
- 注意:一旦把对象定义为防篡改,就无法撤销
- 不可扩展对象
- 密封的对象
- 冻结的对象
高级定时器
(以后再讲🐴)
自定义事件
(以后再讲🐴)
拖放
(以后再讲🐴)
离线应用与客户端存储
(详情以后再讲🐴)
最佳实践
(详情以后再讲🐴)
新兴API
(详情以后再讲🐴)