面向对象的Javascript(4):重载
在小项目中对于JavaScript使用,只要写几个function就行了。但在大型项目中,尤其是在开发追求 良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScript的工作量胜过了C#,这时写一堆function,就会显得很乱,杂乱无章,甚至会出现命名冲突,管理和维 护起来都很麻烦。对于这种情况我们就需要使用面向对象的思想来开发JavaScript。那我们就这样作罢:
在面向对象语言里重载是很重要的一个特性,而JavaScript这个自称面向对象的语言竟然没有直接提供重载的功能。
假如 我这样定义:
function getDate(){.....}
function getDate(date){.....}
那么后一个方法将覆盖前一个,虽然不报错。
但是我们确实是可以实现重载的,如果你用过jQuery,你就会深有体会,比如$("#btn").val() 是获取id为"btn"的按钮的value值,而$("#btn").val("点我")则是给id为"btn"的按钮赋值。
那么JavaScript是怎么实现(准确地讲应该叫“模拟”)的呢?。
答案很简单:arguments
arguments是JavaScript里的一个内置对象,包含了调用者传递的实际参数,但不局限于函数声明所定义的参数列表,而调用时只它和数组一样有个length属性。
我们暂且把它当“数组”来理解吧,我们根据该数组的长度以及其元素的类型来选择不同的实现,从而模拟了重载。
具体请看下面的示例:
function getDate(){
if(arguments.length==0){
var date=new Date().toLocaleDateString();
return "您没有输入参数,现在时间:"+date ;
}
if(arguments.length==1){
if(arguments[0].constructor ==Date){
return "您输入的参数是Date类型,现在时间是:"+arguments[0].toDateString();
}
if(arguments[0].constructor ==String){
return "您输入的参数是String类型,现在时间是:"+arguments[0];
}
}
}
于是我们可以这样调用:
getDate()
getDate(new Date())
getDate("星期一")
这样就实现了JavaScript的重载,不过我们发现这样的“实现”实在是太勉强了,如果参数多了,就会显得力不从心,代码也会很乱,到处是if{...} 。所以我不建议在JavaScript中使用这样的重载。
面向对象的Javascript(4):重载的更多相关文章
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- 前端开发:面向对象与javascript中的面向对象实现(一)
前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...
- javascript 函数重载 overloading
函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function over ...
- javascript arguments与javascript函数重载
1.所 有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数.他不是一个数组,如果用typeof arguments,返回的是’object’.虽然我们可以用调用数据的方法来调用 ...
- 面向对象的 JavaScript
面向对象的javascript 一.创建对象 创建对象的几种方式: var obj = {}; var obj = new Object(); var obj = Object.create(fath ...
- 摘抄--全面理解面向对象的 JavaScript
全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或 ...
- JavaScript函数重载
译者按: jQuery之父John Resig巧妙地利用了闭包,实现了JavaScript函数重载. 原文: JavaScript Method Overloading 译者: Fundebug 为了 ...
- 面向对象的JavaScript --- 动态类型语言
面向对象的JavaScript --- 动态类型语言 动态类型语言与面向接口编程 JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象之间的继承. Jav ...
- 面向对象的JavaScript --- 封装
面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...
随机推荐
- android:themes.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2006 The Andr ...
- C#删除字符串最后一个字符的几种方法
字符串:string s = "1,2,3,4,5,"目标:删除最后一个 "," 方法:1.用的最多的是Substring,这个也是我一直用的s = s.Sub ...
- 使用jQuery页面加载函数启动定时任务
var timer; $(document).ready(function(){ if (timer == undefined) timer = window.setInterval(showTime ...
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件. 解决办法如下: 1.谷 ...
- 2.C#自定义Attribute
阅读目录 一:C#自定义Attribute 二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets 三:Attribut ...
- android 性能分析、优化
.主要介绍了一些分析工具,比如GT.ITest等http://www.jianshu.com/p/8b77d394b2a6 .详细介绍啦android平台常见性能优化工具http://blog.csd ...
- fdisk命令使用说明
CentOS我新建了几个分区,比如/dev/sda4,sda5我想挂在一个目录下,用mount /dev/sda5 /disk ,总提示mount:you must specify the fil ...
- Android开发环境搭建相关文章列表(转载)
Android开发虽然有所了解,但是一直没有搭建开发环境去学习,Android的更新速度比较快了,Android1.0是2008年发布的,截止到目前为止Android已经更新Android5.0.1, ...
- React JS 基础知识17条
1. 基础实例 <!DOCTYPE html> <html> <head> <script src="../build/react.js" ...
- zk框架销毁Page上的Component
销毁Page上的Component ZK的组件之间是树状结构的,每一组件都只有一个根. 从页面上销毁一个组件可以通过下面两种方式来实现: 1. 组件不是根组件时:Component.setParent ...