高级函数
安全的类型检测
1 | Object.prototype.toString.call(obj) === '[object Array]' |
作用域安全的构造函数
1 | function Person(name, age, job) { |
但是,这样会影响继承:
1 | function Polygon (sides) { |
必须将Polygon的prototype添加到原型链上
1 | Rectangle.prototype = new Polygon() |
惰性载入函数
1 | function createXHR() { |
每次调用这个函数都要去判断,有点浪费,可以改写成这样子:
1 | function createXHR() { |
另外一种方式:
1 | var createXHR = (function(){ |
函数绑定
下面是自己实现的bind的例子
1 | function bind(fn, context) { |
函数柯里化
1 | function curry (fn) { |
防篡改对象
级别由低到高分为:
- 不可拓展对象
- 密封对象
- 冻结对象
不可拓展对象
1 | var person = {name: 'ayou'} |
密封的对象
1 | var person = {name: 'ayou'} |
冻结的对象
1 | var person = {name: 'ayou'} |
高级定时器
用setTimeout模拟setInterval
1 | setTimeout(function () { |
Yielding Processes(数组分块技术)
1 | function chunk (array, process, context) { |
函数节流
1 | function throttle(fn, context) { |
自定义事件
1 | function EventTarget() { |
将其混入进其他类:
1 | function Person(name, age) { |