JavaScript函数的声明与调用方式
入职第一天小记
对于初入前端的程序猿来说,对于函数的理解与使用可谓是相当浅薄的,回顾这自己近几年的工作以及学习经历,准备对JavaScript来个系统的总结.
如果要我们对H5中的表单做个简单的校验,我想对于初入前端的童鞋来说都会是这样的表情与心态:
A:哎呀,不就是个表单验证嘛!
B:这个也算是问题么,so easy!
C:哇哦,就这个啊
D:...............
所有的童鞋都带着不屑的眼神与骄傲的姿态拿起笔刷刷刷的写下了如下coding:
function check_phone(){
//逻辑代码
}
function check_age(){
//逻辑代码
}
function check_sex(){
//逻辑代码
}
刷刷刷的抱着激动的心情准备去提交代码,就在这时童鞋们的背后蹭的一下冒出一个人(有着近六七年的工作经验的大牛),且慢!众人皆惊讶,
曰:why?
大牛:你看你们写的这些方法,虽然没有什么大的问题,但是无形中却创建了大量的全局变量
童鞋:有吗,这个不全部是函数吗,莫非函数也是变量??????
大牛:笑着便拿起笔刷刷刷的写出如下code:
var check_phone = function(){
}
var check_sex = function(){
}
var check_age = function(){
}
童鞋:这不才是声明了全局变量吗?
大牛:对啊,那只是把变量给提前声明了而已,而你们写的那种只是把变量给放到了function后面声明,难道这就不是声明了三个全局变量吗
童鞋:那这样有什么问题吗?
大牛:最大的问题便是在你多人协作开发的时候如果创建了多个全局变量的时候,在其他同事进行开发的时候会对你的方法进行覆盖(几率提高)
童鞋:恍然大悟。。。。。。。
大牛:于是 我们可以这样写,用对象进行包装
//封装检测对象
var check_obj = {
check_phone:function(){
//逻辑操作
},
check_age:function(){
//逻辑操作
},
check_sex:function(){
//逻辑操作
}
}
大牛:当然我们还可以这样写
function check_obj(){
this.check_age = function(){
};
this.check_phone = function(){
};
this.check_sex = function(){
}
}
大牛:这样是不是看上去有点高大上了呢,是不是就是类的写法了呢,这样在其他同事调用的时候只需要New一下就可以拥有属于自己的方法了,但是有时候这样做是会做成不必要的资源消耗的,于是我们可以进行如下修改
var check_obj = function(){};
check_obj.proptype = {
check_sex:function(){
},
check_age:function(){
},
check_phone:function(){
}
}
//调用
var a = new check_obj();
a.check_phone();
a.check_sex();
a.check_age();
大神:但是这样的调用方式会让我们把a书写多次,不过这个是可以避免的,看修改后的代码方案:
var check_obj = function(){};
check_obj.proptype = {
check_sex:function(){
return this;
},
check_age:function(){
return this;
},
check_phone:function(){
return this;
}
}
//调用
//var a = new check_obj();
//a.check_phone();
//a.check_sex();
//a.check_age();
//调用新方案
var a = new check_obj();
a.check_age().check_sex().check_phone();
大神:这样是不是就简单多啦 实现了链式调用,同时我们还可以利用proptype向JavaScript原生对象上面添加共有方法类似于Function.proptype,addMethod = function(){},这样在创建函数的时候都会拥有此方法,不过这种方式要慎用,因为JavaScript中大多都是函数实现的,这样会出现太多多于的代码甚至拖垮性能,所以你可以换种方式去实现:例如:Function.proptype = function(fucName,fn){fucName = fn},这样就可以实现选择性的添加了,哈哈是不是很有趣,很有魔力。
童鞋:瞬间惊呆了 原来js还可以这样玩,哈哈 受教了
goodbye everyone,今天的娱乐节目就到这里啦,下次我们再见喽,下次将带来JavaScript的设计模式,初级阶段,bye了各位!
JavaScript函数的声明与调用方式的更多相关文章
- javascript函数的声明和调用
× 目录 [1]函数的声明方式 [2]函数的调用方式 [3]两种声明方式的区别 函数:将完成某一特定功能的代码集合起来,可以重复使用的代码块. ---------------------------- ...
- javascript 函数的4种调用方式与 this(上下文)的指向
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! javascript中作用域链和this(上下文)的指向是很容易混淆的,简单的说就是: 作用域链取决于函数 ...
- javascript函数的4种调用方式
在javascript中一共有4种函数调用模式,分别是:方法调用模式.函数调用模式.构造函数调用模式和apply(call)调用模式,这4种模式的主要差异在于如何初始化关键参数this. 方法调用模式 ...
- JavaScript 函数的4种调用方法
JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. 作为一个函数调用 function myFunction(a, b) { return a * b; } ...
- JavaScript 函数 (一 JavaScript 函数的声明与使用)
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. JavaScript 函数的声明与使用 实例 <!DOCTYPE html> <html> <head> ...
- JavaScript函数的4种调用方法详解
在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造 ...
- javascript this 代表的上下文,JavaScript 函数的四种调用形式
JavaScript 是一种脚本语言,支持函数式编程.闭包.基于原型的继承等高级功能.其中JavaScript 中的 this 关键字,就是一个比较容易混乱的概念,在不同的场景下,this会化身不同的 ...
- 第十篇----------javascript函数的三种定义方式及区别
javascript定义函数有3种方式: //3种函数定义方式,前两种常用 /** * 1,function 语句式 * 形式:句子 * 名称:有名 * 性质:静态 * 解析时机:优先解析 * 作用域 ...
- JavaScript函数定义 ,参数调用
一.JavaScript函数函数: 函数就是一种封装,由事件驱动的或者当它被调用时执行的可重复使用的代码块.定义函数:function 函数名(){函数体;}数不会自动执行,需要被调用才可以执行函数名 ...
随机推荐
- 如何自定义修改ztree树节点的图标
1.此种情况是针对后对数据没有不好判断谁是父节点和子节点的问题 ztree默认的树节点,父子节点的图标不大好看,修改图片只需要在数据的地方添加icon的键,值就是图片的相对位置,但是问题就是需要区分是 ...
- uwsgi错误invalid request block size
uwsgi错误invalid request block size 今天使用uwsgi启动django代码,然后打开浏览器输入http://localhost:8000/admin.后台出现下面错误 ...
- Spring Session解决分布式Session问题的实现原理
使用Spring Session和Redis解决分布式Session跨域共享问题 上一篇介绍了如何使用spring Session和Redis解决分布式Session跨域共享问题,介绍了一个简单的案例 ...
- Java入门系列-20-异常
为什么要进行异常处理 下面这段代码能否正常执行 public class DemoCalc { public static void main(String[] args) { int a=0; in ...
- [转载+补充]windows下SVN客户端的安装
来源:TortoiseSVN新人使用指南 1. 首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html. 2. 根据系统位数 ...
- 本地如何将svn和git管理的代码做关联
svn和git都是广为流传的代码版本管理工具,实际项目中往往会将两者结合使用,那么如何将本地的一份代码和两者做有机的关联呢! 前提假设:项目已经在开发阶段中,此时变更了svn代码库的地址:或者是组里来 ...
- Maven运行时找不到xml文件和properties文件的问题解决
使用Maven构建的项目,包下面的xml文件和properties属性文件默认在运行tomcat插件是不会生成文件到target里面的,需要自己配置 一.第一种解决方法也是最常用的解决方法 在pom. ...
- GET和POST请求的区别如下
POST和GET都是向服务器提交数据,并且都会从服务器获取数据. 区别: 1.传送方式:get通过地址栏传输,post通过报文传输. 2.传送长度:get参数有长度限制(受限于url长度),而post ...
- 给tomcat7w.exe改名字
在平常使用tomcat的过程中,经常会在自己的电脑上安装两个tomcat,而且使用tomcat的tomcat7w.exe界面比较方便,即 但是两个tomcat的名字一样,也只能启动一个tomcat. ...
- 关于css伪类,伪元素详解总结
伪类 伪类就是一种虚构的状态或者说是一个具有特殊属性的元素可以使用CSS进行样式修饰.常见的几种伪类是: :link , :visited , :hover , :active , :first-ch ...