`
- 浏览:
44533 次
- 性别:
- 来自:
广州
-
<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编程,我保证,你会毫无理由的喜欢上它
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 与 JavaScript 面向对象的之私有成员和公开成员 ,大家可以先看上面的再继续往下看。假如 我这样定义: 代码如下: function ...
在本篇文章中,作者详细阐述了JavaScript面向对象编程的几个关键特性,并通过代码示例展示了这些特性的具体应用。首先,我们来了解几个核心概念:类、静态成员、对象和重载。 类在面向对象编程中扮演着基础的角色,...
以上知识点详细介绍了JavaScript面向对象编程中的基本特性、对象的定义方式以及如何通过不同方式实现封装、继承和多态。通过深入理解这些概念,可以帮助开发者更加高效和规范地进行JavaScript编程,编写出更加优雅...
上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...
总结来说,`lang.js`是JavaScript开发者的一个强大工具,它通过提供面向对象的扩展,使得开发者可以在JavaScript中更加方便地实现类的定义和函数重载,提升代码的可维护性和可读性。通过阅读源码和示例,开发者可以...
基于JavaScript的面向对象程序设计研究 本文对基于JavaScript的面向对象程序设计进行了深入研究。研究发现,JavaScript语言具有良好的面向对象特性,特别是在封装性、继承性和多态性等方面。本文对JavaScript的面向...
JavaScript是一种基于原型的面向对象编程语言,它支持多种面向对象的特性,如类、继承、对象、静态成员、重载等。以下是对这些特性的详细解释: 1. **类的使用**: JavaScript中没有传统的类,而是通过构造函数来...
Web 程序开发:第 14 章 JavaScript 面向对象 本章节涵盖了 JavaScript 中的面向对象编程(OOP)概念,包括创建对象、类和实例、继承、多态性等。下面是本章节的知识点总结: 创建对象 * 在 JavaScript 中,对象...
在深入探讨JavaScript如何模拟面向对象重载之前,我们需要先理解重载的概念以及它的作用。在面向对象编程中,重载(Overloading)是一种在同一个作用域内可以声明几个功能类似的同名函数,但是它们的参数类型、个数...
### JavaScript面向对象初探 #### 一、JavaScript基础类型与对象 JavaScript是一种广泛使用的脚本语言,它支持面向对象编程(OOP)。虽然JavaScript不是传统意义上的面向对象语言(如Java或C++), 但它通过一些独特的...
总之,多态是JavaScript面向对象编程的关键特性之一,它通过继承和重载等手段实现了代码的复用和灵活性。在实际项目中,巧妙地利用多态可以提高代码的可读性和可维护性,是提升编程技能的重要一环。
面向对象的JavaScript编程是JavaScript开发中的重要概念,它允许我们以类和对象的方式来组织和处理数据。以下是对标题和描述中涉及的知识点的详细解释: 1. **引用**:在JavaScript中,对象是通过引用传递的,这...
lang.js库提供了包和类的定义、类的继承与混合(mixin)、函数重载等功能,基本可满足大多数面向对象设计的需求。同时支持基于链式的定义方式,让库在使用时更加规范和便捷。下面首先通过简单的例子演示了lang.js的...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其面向对象特性常常引发激烈的讨论。尽管它在某些方面与传统的面向对象编程语言(如Java或C++)有所不同,但JavaScript确实具有面向对象的特性,只是实现方式...
面向对象编程(Object-Oriented Programming,简称OO)是计算机编程范式之一,其核心思想是通过对象来模拟现实世界中的各种实体或概念。面向对象编程通过类(Class)的概念来定义对象的蓝图,并通过实例化...
- **封装**:面向对象编程的基本特性之一,将数据和操作数据的方法集中在一起,通过对象进行访问,提高代码的可维护性和安全性。 - **继承**:通过继承,子类可以复用父类的属性和方法,有利于代码复用和减少代码量...