javascript object oriented 面向对象编程初步

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

复制代码 代码如下:

<script language="javascript" type="text/javascript"> 
<!-- 

person = new Object() 
person.name = "Tim Scarfe" 
person.height = "6Ft" 

person.run = function() { 
this.state = "running" 
this.speed = "4ms^-1" 


//--> 
</script> 



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

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

复制代码 代码如下:

<script language="javascript" type="text/javascript"> 
<!-- 

// Object Literals 

timObject = { 
property1 : "Hello", 
property2 : "MmmMMm", 
property3 : ["mmm", 2, 3, 6, "kkk"], 
method1 : function(){alert("Method had been called" + this.property1)} 
}; 

timObject.method1(); 
alert(timObject.property3[2]) // will yield 3 

var circle = { x : 0, y : 0, radius: 2 } // another example 

// nesting is no problem. 
var rectangle = {  
upperLeft : { x : 2, y : 2 }, 
lowerRight : { x : 4, y : 4} 


alert(rectangle.upperLeft.x) // will yield 2 

//--> 
</script> 



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

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

对象的构造和原型

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

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


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

复制代码 代码如下:

<script language="javascript" type="text/javascript"> 
<!-- 

function cat(name) { 
this.name = name; 
this.talk = function() { 
alert( this.name + " say meeow!" ) 

}  

cat1 = new cat("felix") 
cat1.talk() //alerts "felix says meeow!" 

cat2 = new cat("ginger") 
cat2.talk() //alerts "ginger says meeow!" 

//--> 
</script>



在这里,函数 cat() 是一个对象构造器,它的属性和方法在函数体里用this来定义,用对象构造器定义的对象用 new 来实例化.主意我们如何非常容易的定义多个cat 的实例.每一个都有自己的名字,这就是对象构造器带给我们的灵活性.
构造器建立了对象的蓝图.并不是对象本身.
在原型里增加方法.
在上面我们看到的例子里,对象的方法是在构造器里定义好的了.另外一种实现的途径是通过原型(prototype).xxx
原型是javascript继承的一种形式.我们可以为对象定义好后,再创造一个方法.原来所有对象的实例都将共享.
让我们来扩展最初的 cat 对象.增加一个改名的方法.用 prototype 的方式. 

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjdpds.html