javascript object oriented 面向对象编程初步
javascript object oriented 面向对象编程初步
发布时间:2016-12-30 来源:查字典编辑
摘要:用newObject()来创建对象在javascript里有几种创建对象的方法,在不同的场合可用不同的方法.最简单的就是用new操作符,例如...

用newObject()来创建对象

在javascript里有几种创建对象的方法,在不同的场合可用不同的方法.最简单的就是用new操作符,例如:

复制代码 代码如下:<scriptlanguage="javascript"type="text/javascript">

<>

</script>

我们在这个例子里定义了person这个对象,然后加入了它的属性和方法.在这个例子里,自定义的方法里有两个属性.

用文字记号LiteralNotation创建对象

用文字记号也可以创建对象,但要javascript1.2以上版本.它的创建形式是多样的.

复制代码 代码如下:<scriptlanguage="javascript"type="text/javascript">

<>

</script>

文字记号可是是数组,也可以是任意的javascript表达式或值.

用new操作符或文字记号创建一个自定义对象都是简单的,也是符合逻辑的.但它最大的缺点就是结果不可复用.也不能很容易的用不同的版本初始化创建对象.例如上面的第一个例子,如果person的name不是"TimScarfe",那样我们不得不重新定义整个对象,仅仅为了适应它的一点点改变.

对象的构造和原型

在OOP的世界里,用先前的方法定义对象在许多场合都有限制.我们需要一种创建对象的方法,类型可以被多次使用而不用重新定义.对象在实例化时每次都可以按需分配不同的值.实现这个目标的标准方法是用对象构造器函数.

一个对象构造器只不过是个有规则的javascript函数,它就象一个容器(定义参数,调用其他函数等等).它们两者所不同的是构造器函数是由new操作符调用的.(你将在下面的例子中看到).基于函数语法形式的对象定义,我们可以使它工作得最好.

让我们用现实世界中的猫来举个例子.猫的name和color是猫的属性.meeyow(猫叫)是它的一个方法.重要的是任何不同的猫都可能有不同的name和meeyow的叫声.为了建立适应这些特征的对象类,我们将使用对象构造器.

复制代码 代码如下:<scriptlanguage="javascript"type="text/javascript">

<>

</script>

在这里,函数cat()是一个对象构造器,它的属性和方法在函数体里用this来定义,用对象构造器定义的对象用new来实例化.主意我们如何非常容易的定义多个cat的实例.每一个都有自己的名字,这就是对象构造器带给我们的灵活性.

构造器建立了对象的蓝图.并不是对象本身.

在原型里增加方法.

在上面我们看到的例子里,对象的方法是在构造器里定义好的了.另外一种实现的途径是通过原型(prototype).xxx

原型是javascript继承的一种形式.我们可以为对象定义好后,再创造一个方法.原来所有对象的实例都将共享.

让我们来扩展最初的cat对象.增加一个改名的方法.用prototype的方式.

复制代码 代码如下:<scriptlanguage="javascript"type="text/javascript">

<>

</script>

就象你所看到的.我们仅只用了关键字prototype实现了在对象定义后马上增加了changeName方法.这个方法被所有的实例共享.

用原型(prototype)重载javascript对象

原型在自定义对象和有选择性的重载对象上都可以工作.比如Date()或String这可能是无止境的.

子类和超类

在JAVA和C++里,有关于类层次的外在概念.每一个类能有一个角色.

InJavaandC++,thereisanexplicitconceptoftheclasshierarchy.i.e.Everyclasscanhaveasuperclassfromwhichitinheritspropertiesandmethods.Anyclasscanbeextended,orsub-classedsotheresultingsubclasscaninherititsparent'sbehavior.Aswehaveseen,javascriptsupportsprototypeinheritanceinsteadofclassbased.It'spossibleforinheritancetohappenotherways,however.

Thefollowingisanexampleofinheritancethroughfunctions.

下面一个例子演示了如何继承通过function.

复制代码 代码如下:<scriptlanguage="javascript"type="text/javascript">

<>

</script>

基于继承的原型是遥远的.为javascript应用程序在许多场合.

(基于原型的继承在许多javascript的应用场合是非常有用的.)

对象作为联合数组

正如你所知,(.)操作符能够用来存储.[]操作符用来操作数组.

<scriptlanguage="javascript"type="text/javascript">

<>

</script>

<SCRIPTLANGUAGE="javascript">

<>

</SCRIPT>

HowdoIloopthroughpropertiesinanobject?

Youneedtouseafor/inloop.

我们可以通过forin循环来遍历对象的属性。

<scriptlanguage="javascript"type="text/javascript">

<>

</script>

<SCRIPTLANGUAGE="javascript">

<>

</SCRIPT>

Theimportantthingtonoticeisthatintheobjectsyntaxthepropertyisanidentifier,whereasinthearraysyntax,it'sastring.Theobviousbenefitsofusinganarraysyntaxtoaccessanobjectisbecauseoftheliteraldatatype,youcaneasilyconcatstringsandplayaroundwiththemtoaccessanobject.Forthistoworkwiththestandardsyntax,aneval()wouldneedtobeused.

应该值得注意的是对象的属性只是一个标识字符,尽管在一个数组里是一个字符串,因为是一个literal的数据类型,所以有利于使用数组的方式的操作一个对象。你也可以很容易的存取一个对象在标准的语句中。这个时候eval()函数可能用得到。

<scriptlanguage="javascript"type="text/javascript">

<>

</script>

网上的东西错误的太多了,jb51.net修正后的测试下

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类