javascript之高级函数应用思想
1.级联函数:应用对象方法调用的连写
function A(){
this.a = '';
this.b = '';
this.c = '';
} //改造一下
A.prototype = { A.prototype = {
setA : function(){ setA : function(){
this.a = 'A'; this.a = 'A';
}, return this;
setB : function(){ },
this.b = 'B'; setB : function(){
}, this.b = 'B';
setC : function(){ return this;
this.c = 'c'; },
} setC : function(){
} this.c = 'c';
var x = new A(); return this;
x.setA(); }
x.setB(); }
x.setC(); x.setA().setB().setC();
2.惰性载入:性能优化
我们先看个案例
function addEvent(type, element, func){
if(element.addEventListener){
element.addEventListener(type, func, false);
}else if(element.attachEvent){
element.attachEvent('on'+type, func);
}else{
element['on'+type] = func;
}
}
每次调用addEvent函数的时候,它都要对浏览器事件机制进行检查,从第一个 if 开始判断,无端地浪费了内存,javasript提出了 惰性载入函数思想,第一次判断出浏览器能力,之后就不再判断了,好啦,脱衣解裤,我们开始吧......
方式一:函数重写方式
/**
* 分析:
* 在这个惰性载入的addEvent()中,if语句的每个分支都会为addEvent变量赋值,有效覆盖了原函数。
* 最后一步便是调用了新赋函数。下一次调用addEvent()的时候,
* 便会直接调用新赋值的函数,这样就不用再执行if语句了
*/
function addEvent(type, element, func){
if(element.addEventListener){
//惰性载入重写addEvent()
addEvent = function(type, element, func){
element.addEventListener(type, func, false);
};
}else if(element.attachEvent){
addEvent = function(type, element, func){
element.attachEvent('on'+type, func);
}; }else{
addEvent = function(type, element, func){
element['on'+type] = func;
};
}
return addEvent(type, element, func);
}
方式二: 匿名函数立即调用方式
/**
* 分析:
* 创建一个匿名的自执行函数,通过不同的分支以确定应该使用那个函数实现,
* 每个分支都返回一个正确的函数,并立即将其赋值给变量addEvent
* 之后每次调用都是这个被赋的值
*/
var addEvent = (function(){
if(document.addEventListener){
return function(type, element, func){
element.addEventListener(type, func, false);
};
}else if(document.attachEvent){
return function(type, element, func){
element.attachEvent('on'+type, func);
};
}else{
return function(type, element, func){
element['on'+type] = func;
};
}
})();
怎么样,是不是有点小高潮,反正我是湿了......
3.函数柯里化: 这里就不讲解了,感觉没JB用,
javascript之高级函数应用思想的更多相关文章
- javaScript的高级函数
1.map() map()方法返回一个新数组,新数组是原始数组调用函数之后处理后的值. map()方法按照原始数组元素顺序依次处理元素. map不会对空数组进行检测. map不会改变原始数组 . 参数 ...
- javascript高级函数
高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...
- 22.1 高级函数【JavaScript高级程序设计第三版】
函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
- 前端常用的库和实用技术之JavaScript高级函数
1.惰性载入函数 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 学习javaScript必知必会(3)~数组(数组创建,for...in遍历,辅助函数,高级函数filter、map、reduce)
一.数组: 1.js是弱语言,js中的数组定义时:不用指定数据类型.不用功指定数组长度:数组可以存储任何数据类型的数据 2.数组定义的[ ] 的实质: [] = new Array(); {} = n ...
- JavaScript高阶函数 map reduce filter sort
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 高阶函数 一个函数就接收另一个函数作为参数,这种函数就称之为高阶函数 1.高阶函数之map: ...
- JavaScript 立即执行函数
js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...
- Javascript学习之函数(function)
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
随机推荐
- 升级Flash Builder 4.7中的AIR SDK
原文地址:http://helpx.adobe.com/flash-builder/kb/overlay-air-sdk-flash-builder.html本文并没有“忠于”原文翻译. Flash ...
- uboot_starts_analysis.pdf
Uboot中start.S源码的指令级的详尽解析 HTML版本的在线地址为:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/ ...
- QTextEdit 总结
关于Qt的富文本处理, 可以参考文档:Rich Text Processing 该文档有人翻译了一下(本来我想翻译- -!), 参考Rich Text Processing富文本处理 QTextEdi ...
- Sorting It All Out
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- Android入门:一、Android Studio 2.1安装及初始化配置
以前研究过eclipse +ADT开发android app,没深入再加上工作也用不上就扔在那,现在需要做APP开发,发现eclipse +ADT也不再更新了,google推出了功能强大的Androi ...
- UVA442 Matrix Chain Multiplication 矩阵运算量计算(栈的简单应用)
栈的练习,如此水题竟然做了两个小时... 题意:给出矩阵大小和矩阵的运算顺序,判断能否相乘并求运算量. 我的算法很简单:比如(((((DE)F)G)H)I),遇到 (就cnt累计加一,字母入栈,遇到) ...
- C++之类的构造函数,不得不学明白的重点
一.认识构造函数 当创建一个类类型对象时,类通过一个或者几个特殊的成员函数来控制对象的初始化,这种函数就是构造函数.它的任务就是用来初始化类对象的成员的,所以当创建类对象或者类对象被创建就会调用构造函 ...
- ARM体系结构简介
ARM体系结构简介 新一代的ARM9处理器,能达到两倍ARM7的处理能力,它们的区别如下: ARM微处理器的工作状态(可切换): 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令 第二种为 ...
- insert 另外一种用法
then into dept01(id) values(deptno) then into dept02(id) values(deptno) else into dept03(id) values( ...
- 锋利的jQuery第2版学习笔记4、5章
第4章,jQuery中的事件和动画 注意:使用的jQuery版本为1.7.1 jQuery中的事件 JavaScript中通常使用window.onload方法,jQuery中使用$(document ...