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类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针. 一 函 ...
随机推荐
- android之多媒体篇(三)
录像 Android提供了2种方案去录像. 方案一: 最简单的方式就是使用Intents去启动App来帮助你完成.这个方案使你能够指定输出的位置和视频的质量.这方案通常是最好的方法,应该可以用在多种情 ...
- iOS开发——实用篇Swift篇&保存图片到相册
保存图片到相册 最近在深入的学习关于swift相关技术,虽然海做不出什么好的东西,但是感觉收获不少,相信总有一样能用到,所以就总结了一下,希望大家喜欢! 1.OC中的写法 在OC中,我们需要保存图片到 ...
- Java 开源博客——B3log Solo 0.6.6 正式版公布了!
Java 开源博客 -- B3log Solo 0.6.6 正式版公布了!欢迎大家下载. 该版本号引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也很欢迎大家參与 ...
- SqlDependency缓存数据库表小案例
SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...
- T-SQL 之 概述
T-SQL(Transact Structured Query Language )它是ANSI和ISO SQL 标准的Microsoft SQL Server方言或扩展,SQL SERVER专用标准 ...
- Java垃圾回收(GC)与引用的种类
垃圾回收 GC public class MyObject { private String id; public MyObject(String id) { this ...
- [改善Java代码]不要只替换一个类
建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...
- 关于JDK中的运算符和变量
类名首字母必须大写.多个单词组成的类名,每个单词的首字母大写. 只要起名称就要让他有意义.Java中的关键字都是由小写字母组成的. 在项目中给标示符起名字在公司中大都有固定的规则.一般加上标示符和$符 ...
- GD库使用小结---1
因为一开始,“大家”都说一般任务中,用php操作图片不常见,像我们这种基本业务型的,就更用不到了,所以先别看,偶就没有看.现在有机会了自然要来玩一把. 以前学过C#的GDI+,交了课程设计后忘得一干二 ...
- Nhibernate3.3.3sp1基础搭建测试
实体类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...