实现JavaScript自定义函数的整合、链式调用及类的封装
函数声明形式:表单验证函数
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function checkName(){ console.log('检查用户名');}function checkEmail(){ console.log('检查邮箱地址');}function checkPassword(){ console.log('检查密码');}checkName();checkEmail();checkPassword(); |
函数字面量形式:
在团队开发中定义函数容易覆盖他人已经定义过的函数,将函数保存在一个变量里,这样就减少了原有功能被覆盖的风险。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
var checkName = function(){ console.log('检查用户名');}var checkEmail = function(){ console.log('检查邮箱地址');}var checkPassword = function(){ console.log('检查密码');}checkName();checkEmail();checkPassword(); |
对象属性形式:利用对象具有属性与方法的特性。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var checkObject = { checkName:function(){ console.log('检查用户名'); }, checkEmail:function(){ console.log('检查邮箱地址'); }, checkPassword:function(){ console.log('检查密码'); } };checkObject.checkName();checkObject.checkEmail();checkObject.checkPassword(); |
对象赋值形式:对象的另一种创建形式。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var checkObject = function(){};checkObject.checkName = function(){ console.log('检查用户名');}checkObject.checkEmail = function(){ console.log('检查邮箱地址');}checkObject.checkPassword = function(){ console.log('检查密码');}checkObject.checkName();checkObject.checkEmail();checkObject.checkPassword(); |
也是利用checkObject.checkName()进行调用。 但是这个对象的方法在创建新对象时不能被继承。
返回对象:可以将这些方法放在一个函数对象中返回。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var checkObject = function(){ return { checkName : function(){ console.log('检查用户名'); }, checkEmail: function(){ console.log('检查邮箱地址'); }, checkPassword: function(){ console.log('检查密码'); } }};var a = new checkObject();a.checkName();a.checkEmail();a.checkPassword(); |
每次调用这个函数时,都返回一个新对象,返回的checkObj对象与checkObject对象没有任何关系。
类方式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var checkObject = function(){ this.checkName = function(){ //验证姓名 } this.checkEmail = function(){ //验证邮箱 } this.checkPassword = function(){ //验证密码 }}var checkObj =new checkObject();checkObj.checkName(); |
每次通过new关键词创建新对象的时候,都会对类的this上的属性进行复制, 造成了不必要的内存消耗。
prototype原型:查找绑定方法
|
1
2
3
4
5
6
7
8
9
10
|
var checkObject = function(){};checkObject.prototype.checkName = function(){ //验证姓名}checkObject.prototype.checkEmail = function(){ //验证邮箱}checkObject.prototype.checkPassword = function(){ //验证密码} |
以上prototype需要书写多遍,可简写为:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
var checkObject = function(){};checkObject.prototype = { checkName :function(){ //验证姓名 }, checkEmail :function(){ //验证邮箱 }, checkPassword :function(){ //验证密码 }} |
依赖原型依次查找,每次找到方法都是同一个。
|
1
2
|
var checkObj =new checkObject();checkObj.checkName(); |
链式调用:声明的每个方法末尾将当前对象返回。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var checkObject = { checkName : function(){ //验证姓名 return this; }, checkEmail : function(){ //验证邮箱 return this; }, checkPassword : function(){ //验证密码 return this; }} |
链式调用:
|
1
|
checkObject.checkName().checkEmail().checkPassword(); |
放在原型对象里:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var checkObject = function(){};checkObject.prototype = { checkName : function(){ //验证姓名 return this; }, checkEmail : function(){ //验证邮箱 return this; }, checkPassword : function(){ //验证密码 return this; }} |
链式调用:
|
1
2
|
var checkObj = new checkObject();checkObj.checkName().checkEmail().checkPassword(); |
Function对象扩展
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Function.prototype.addMethod = function(name, fn){ this[name] = fn;} var method = function(){};(或者var method = new Function();)method.addMethod('checkName',function(){ //验证姓名});method.addMethod('checkEmail',function(){ //验证邮箱});method.addMethod('checkPassword',function(){ //验证密码}); |
链式定义
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Function.prototype.addMethod = function(name, fn){ this[name] = fn; return this;} var method = function(){};(var method = new Function();)method.addMethod('checkName',function(){ //验证姓名 return this;}).addMethod('checkEmail',function(){ //验证邮箱 return this;}).addMethod('checkPassword',function(){ //验证密码 return this;}); |
可以链式调用了:
|
1
|
method.checkName().checkEmail().checkPassword(); |
对于类似调用方式,还可以改成:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Function.prototype.addMethod = function(name, fn){ this.prototype[name] = fn;}var method = function(){};method.addMethod('checkName',function(){ //验证姓名 return this;}).addMethod('checkEmail',function(){ //验证邮箱 return this;}).addMethod('checkPassword',function(){ //验证密码 return this;}); |
这种更改之后,在调用的时候不能直接使用,要通过new关键词来创建新对象了。
|
1
2
|
var m = new Method();m.checkName(); |
实现JavaScript自定义函数的整合、链式调用及类的封装的更多相关文章
- 使用 JavaScript自定义函数计算出教室的体积大小,其中教室的长、宽、高分别为 8 米、5 米、3 米
查看本章节 查看作业目录 需求说明: 使用 JavaScript自定义函数计算出教室的体积大小,其中教室的长.宽.高分别为 8 米.5 米.3 米 实现思路: 创建 HTML 页面 在页面的 < ...
- asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结
通常javascript代码可以与HTML标签一起直接放在前 端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿:所以一般有良好开发习惯的程序员都会把 ...
- JavaScript自定义函数
js对象转成用&拼接的请求参数(转) var parseParam=function(param, key){ var paramStr=""; if(param inst ...
- [译]JavaScript:函数的作用域链
原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx 在JavaScr ...
- javascript学习(10)——[知识储备]链式调用
上次我们简单的说了下单例的用法,这个也是在我们java中比较常见的设计模式. 今天简单说下链式调用,可能有很多人并没有听过链式调用,但是其实只要我简单的说下的话,你肯定基本上都在用,大家熟知的jQue ...
- Java Servlet(八):EL自定义函数
EL自定义函数:在EL表达式中调用的某个java类的静态方法,这个静态方法需在web应用程序中进行配置才可以被EL表达式调用. EL自定义函数可以扩展EL表达式的功能,让EL表达式完成普通java程序 ...
- javascript篇-----函数作用域,函数作用域链和声明提前
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...
- javascript链式调用实现方式总结
方法链一般适合对一个对象进行连续操作(集中在一句代码).一定程度上可以减少代码量,缺点是它占用了函数的返回值. 一.方法体内返回对象实例自身(this) function ClassA(){ this ...
- Javscript的函数链式调用基础篇
我们都很熟悉jQuery了,只能jQuery中一种非常牛逼的写法叫链式操作: $('#div').css('background','#ccc').removeClass('box').stop(). ...
随机推荐
- matlab文件操作及读txt文件(fopen,fseek,fread,fclose)
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件.MATLAB提供了一系列低层输入输出函数,专门用于文件操作. 1.文件的打开与关闭 1)打开文件 在读写文件之前,必须先用f ...
- 深入理解计算机系统家庭作业汇总 20135301&&20135328
深入理解计算机系统家庭作业 深入理解计算机系统第二章家庭作业 题目2.64 题目要求 判断二进制数偶数位是否有任意一位位为1,有的话返回1,否则返回0 解题过程 int any_even_one(un ...
- 实验5 简单嵌入式WEB服务器实验 实验报告 20135303 20135326
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级: 1353 姓名:20135303 魏昊卿 学号:2013532 ...
- Java server数据之(4):Redis鸟瞰
Redis简介 Redis是NoSQL数据库中的一种,属于key-value键值对这一个子类别. 它常被称作是一款数据结构服务器(data structure server). Redis中的数据结构 ...
- ios9+xcode7 适配笔记
升级了xcode7,最近ios9上马,又到了草泥马的时间,apple开放团队每次系统更新,都是无数个草泥马的适配夜晚,现在ios9上线以前的app竟然启动crash,这是要闹哪样. 1.微信和微博的s ...
- 04.C#类型系统、值类型和引用类型(二章2.2-2.3)
今天要写的东西都是书中一些概念性的东西,就当抄笔记,以提问对话的方式将其写出来吧,说不定以后面试能有点谈资~~~ Q1.C#1系统类型包含哪三点特性? A1.C#1类型系统是静态的.显式的和安全的. ...
- 【Moqui业务逻辑翻译系列】--UBPL index
h2. [UBPL Introduction] ubpl介绍h2. [Actor Definitions] 行为定义h2. General Business Process Stories 通常的商业 ...
- Java Web中将oracle的数据库内容以表格形式展现到页面中(分页展示)
分页SQL语句: ----分页显示 select * from (select rownum as r,t.* from () ; 查询的结果如下: 这个SQL,使用了三层嵌套的查询方式: 1)最内层 ...
- 网络流量监控工具----iftop
文章转自:http://www.vpser.net/manage/iftop.html.再次本人只是作为笔记使用,不做其他用途. 日常工作中用它来监控网卡的实时流量,(可以指定网段),反向解析IP.显 ...
- hdu1686 KMP
简单KMP 求单词出现的次数.直接可以考虑,在每一次匹配成功时,让ans++,k=next[k],直到结束. #include<stdio.h> #include<string.h& ...