`
huangningren
  • 浏览: 43592 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JavaScript面向对象之方法重载(转)

阅读更多
<script type='text/javascript'>
function ABC()
{
this.member = 1;
this.method = Show;
}
function Show(a,b,c)
{
this.member = 123;
if(arguments.length==1)
if(arguments[0].constructor == Number)
Show1_int.apply(this, arguments);
else
if(arguments[0].constructor == Date)
Show1_date.apply(this, arguments);
else Show1_string.apply(this, arguments);
if(arguments.length==2)
if(arguments[0].constructor == Array)
Show3.apply(this,arguments);
else Show2.apply(this,arguments);}
function Show1_int(a)
{ alert('1 integer input parameter ' + a+ ' methode is called');
}
function Show1_string(a)
{ alert('1 string input parameter ' + a+ ' methode is called');
}
function Show1_date(a)
{
alert('1 date input parameter ' + a+ ' methode is called');
}
function Show2(a,b)
{
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);
}

// 演示引用方式传递
function Show3(a,b)
{
arguments[0][0]=2;
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);}
var o = new ABC();
var arr = new Array();
arr[0]=321;o.method(arr[0],2);
// 值传递
alert(arr[0]);
// 原始值未改变
o.method(arr,2);
// 引用方式传递
alert(arr[0]);
// 方法调用时被方法修改
o.method(new Date());
</script>
<script type='text/javascript'>
function ABC()
{
this.member = 1;
this.method = Show;
}
function Show(a,b,c)
{
this.member = 123;
if(arguments.length==1)
if(arguments[0].constructor == Number)
Show1_int.apply(this, arguments);
else
if(arguments[0].constructor == Date)
Show1_date.apply(this, arguments);
else Show1_string.apply(this, arguments);
if(arguments.length==2)
if(arguments[0].constructor == Array)
Show3.apply(this,arguments);
else Show2.apply(this,arguments); }
function Show1_int(a)
{
alert('1 integer input parameter ' + a+ ' methode is called');
}
function Show1_string(a)
{
alert('1 string input parameter ' + a+ ' methode is called');
}
function Show1_date(a)
{
alert('1 date input parameter ' + a+ ' methode is called');
}
function Show2(a,b)
{
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);
}
// 演示引用方式传递
function Show3(a,b)
{
arguments[0][0]=2;
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);
}
var o = new ABC();
var arr = new Array();
arr[0]=321; o.method(arr[0],2);
// 值传递
alert(arr[0]);
// 原始值未改变
o.method(arr,2);
// 引用方式传递
alert(arr[0]);
// 方法调用时被方法修改
o.method(new Date());
</script>



我们无法直接定义重载方法,但是却可以为其他函数定义一个公开的重载方法调用。通过这种方式,对于调用者而言,重载的方法是透明的,只需调用方法名并传入适当的参数即可,与多数高级语言一样,不可定义传入参数相同而返回类型不同的重载方法。
  下面我们再分析一下call和apply的区别,所有的函数都具有这两个方法,它们在使用上没有太大差别,主要区别就在于传入参数不同:
  call使用可变参数序列进行值传递,而apply则使用数组或者arguments对象进行传递。
  call方法的语法:
  call([thisObj[,arg1[, arg2[, [,.argN]]]]])
  参数
  thisObj
  可选项。将被用作当前对象的对象。
  arg1, arg2, , argN
  可选项。将被传递方法参数序列。
  说明
  call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
  如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
  apply方法的语法:
  apply([thisObj[,argArray]])
  参数
  thisObj
  可选项。将被用作当前对象的对象。
  argArray
  可选项。将被传递给该函数的参数数组。
  说明
  如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
  如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
  注:以上资料来自《Jscript参考手册》
  小节:通过show2方法,我们看到使用call或者apply方式可以将当前对象传递到方法内部,以此来访问当前对象的一些成员。这使得我们可以定义一些方法,给不同的自定义类进行调用,具体可以查看上篇文章我们定义的一个继承结构。
  同时通过上面例子我们还演示了两者进行传递时,参数的传递方式会根据参数的不同而不同,如果是值变量则使用值传递,否则以引用方式传递。
  尾声:当我们使用JavaScript的时候,你必须了解和掌握JavaScript的一些特点,它跟高级编程语言存在着一些区别,它灵活的特点给我们的开发带来了极大的灵活性,因此一旦深入JavaScript编程,我保证,你会毫无理由的喜欢上它
分享到:
评论

相关推荐

    Javascript 面向对象之重载

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 与 JavaScript 面向对象的之私有成员和公开成员 ,大家可以先看上面的再继续往下看。假如 我这样定义: 代码如下: function ...

    javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

    Javascript 面向对象 重载

    在面向对象语言里重载是很重要的一个特性,而JavaScript这个自称面向对象的语言竟然没有直接提供重载的功能。

    面向对象javascript笔记

    大家好,根据我的学习经验总结了下面一些javascript面向对象方法的知识,希望对一些接触这方面不多的人有所帮助,有不正确的地方请指正。 学习内容;引用,函数重载和类型检查,作用域,图解prototype和constructor...

    Javascript面向对象扩展库(lang.js)

    lang.js是Javascript面向对象编程的扩展库,支持包、类的定义和函数重载等功能,接口简洁规范,易用性强,压缩包内包含文档示例和带注释的源码,欢迎下载试用。

    javascript面向对象三大特征之多态实例详解

    本文实例讲述了javascript面向对象三大特征之多态。分享给大家供大家参考,具体如下: 多态 从某种意义上来说,多态是面向对象中重要的一部分,也是实施继承的主要目的。 一个实例可以拥有多个类型,它既可以是这种...

    javascript 面向对象编程基础 多态

    其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现! 重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言...

    JavaScript面向对象分层思维全面解析

    但在javascript里面多态的概念是不存在,而继承由于web页面的必须先下载js在运行导致js的继承不能像后台那么灵活而且js没有重载以及重写不方便(而且js中重写的意义不是很大),所以在js中很少用到面向对象,可能在一些...

    javascript面向对象特性代码实例

    主要介绍了javascript面向对象特性代码实例,包括类、静态成员、对象、重载,需要的朋友可以参考下

    javascript 面向对象,实现namespace,class,继承,重载

    确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水 .定义namespace ...

    JavaScript教程--从入门到精通

    基于对象的javascript语言 javascript语言是基于对象的(Object-Based),而不是面向对象的 (object-oriented)。之所以说它是一门基于对象的语言,主要是因为它没有提供象抽象、继承、重载等有关 面向对象语言的...

    源文件程序天下JAVASCRIPT实例自学手册

    4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript对象的生成 4.2.1 HTML文档...

    mayjs:一个javascript面向对象的库

    方法重载帮助您清理函数标题行中参数的类型声明 类似关键字的功能简化复杂表达式和重复代码的一系列功能 安装 安装nodejs npm intall mayjs 安装浏览器 bower install mayjs 入门 在您的项目中开始使用May.js的最...

    javascript中通过arguments参数伪装方法重载

    在很多面向对象的高级语言中,都有方法的重载。而javascript没有方法重载这个概念。但是我们可以通过arguments这个参数来伪装成函数的重载 在模拟之前我们先看一下代码: 代码如下: //表面上没有声明形式参数的函数...

    JavaScript基础和实例代码

    4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript对象的生成 4.2.1 HTML文档...

    Javascript面向对象扩展库代码分享

    lang.js库提供了包和类的定义、类的继承与混合(mixin)、函数重载等功能,基本可满足大多数面向对象设计的需求。同时支持基于链式的定义方式,让库在使用时更加规范和便捷。下面首先通过简单的例子演示了lang.js的...

Global site tag (gtag.js) - Google Analytics