javascript中对象使用实例及简介

 <script language="javascript">
 //Author : 东阁
 //Date: 2008-1-10
 
 //实现原型的定义
 //并联系定义类的属性和类的方法以及实例属性和实例方法
 function Circle(radius)
 {
  this.r=radius;  //定义了实例 半径属性
 }
 //定义了类的属性
 Circle.PI=3.14;
 //定义类的原型的方法
 //通过把函数赋给构造函数的原型对象使它成为实例方法
 //javascript 1.1中,我们可以用函数直接量定义一个无需命名为Circle_area的函数.
 function Circle_area(){return this.r*this.r*Circle.PI;}
 Circle.prototype.area=Circle_area;
 
 //定义另外的一个函数,通过比较半径的比较来得出那个圆的半径大的作为较大的圆
 function Circle_max(a,b)
 {
  if(a.r>b.r) return a;
  else return b;
 }
 //由于该函数比较的是两个Circle对象,所以将它看作对个别Circle对象进行操作的实例方法
 //是没有意义的,但我们又不希望成为一个单独的函数,所以我们把它赋给了一个构造函数使它成为类函数.
 Circle.max=Circle_max;
 //覆盖了Object.prototype中的toString()方法,实现了C++和Java中类似的方法
 //不同的就是C# 中的那中重写目的来实现的重载
 Circle.prototype.toString=function(){return "this Circle's radius is :"+this.r;}

 var c=new Circle(1.0);
 c.r=2.2;
 var a=c.area();
 var x=Math.exp(Circle.PI);
 var d=new Circle(1.2);
 var bigger=Circle.max(c,d);
 var strbigger=bigger.toString();
 document.write("c's radius is :"+c.r+"d's radius is :"+d.r+"the bigger is:"+strbigger);
 document.write("<br/>this Circle class's attibute PI is :"+Circle.PI);

 

 //定义一个常用的复数类型
 //Complex为复数类
 //复数就是一个实数和虚数的和,虚数是-1的平方根
 /*
 定义类的第一个是定义该类的构造函数。
 这个构造函数要初始化对象的所有实例属性
 这些属性是核心的“状态变量”,是他们使类的各个实例互不相同的
 */
 function Complex(real,img)
 {
  this.x=real;
  this.y=img;
 }
/*
定义类的第二步是在构造函数的原型对象中定义它的实例方法(或其他属性)
该对象定义的任何属性都将被这个类的所有实例继承
注意实例方法对this关键字的隐式操作
许多方法都不需要其它实际参数
*/
Complex.prototype.magitude=function(){
 return Math.sqrt(this.x*this.x+this.y*this.y);
};
//以上是一种函数直接量
//返回复数的相反数
Complex.prototype.reverse=function(){
 return new Complex(this.y,this.x);
}
//以一种有效的方式将一个Complex对象转换为一个字符串
Complex.prototype.toString=function(){
 return "{"+this.x+"+"+this.y+"i}";
}
//返回一个复数的实数部分
//该函数是在将Complex对象作为原始值处理时调用的
Complex.prototype.valueOf=function(){
 return this.x;
}
/*
定义类的第三步是定义类方法
常量和其他必需的类属性,作为构造函数自身的属性(而不是构造函数的原型对象的属性)
注意,类方法没有使用关键字this,因为它们支队他们的实际参数进行操作.
*/
//计算两个复数的和并返回结果
Complex.add=function(a,b){
 return new Complex(a.x+b.x,a.y+b.y);
}
//计算两个复数的差
Complex.subtract=function(a,b){
 return new Complex(a.x-b.x,a.y-b.y);
}
//两个复数的乘积
Complex.mutiply=function(a,b){
 return new Complex(a.x*b.x-a.y*b.y,a.x*b.x+a.y*b.y);
}
//下面是一些有用的预定义复数
//他们被定义为类的属性,这样 它们就可以被用作常量了
Complex.zero=new Complex(0,0);
Complex.one=new Complex(1,0);
Complex.i=new Complex(0,1);
c1=new Complex(6.2,4.5);
c2=new Complex(5,3);
document.write("<br />c1.x="+c1.x+"c1.y= "+c1.y);
document.write("<br/>c2:   "+c2.toString());
document.write("<br />"+Complex.add(c2,c1).toString());
document.write("<br />"+c2.magitude());


//类的继承
function MoreComplex(real,img)
{
 this.x=real;
 this.y=img;
}
/*
我们将它的原型对象作为Complex对象
这一意味着新类的实例将继承MoreComplex.prototype
后者有Complex.prototype继承而来
Complex.prototype又由Object.prototype继承而来的
*/
MoreComplex.prototype=new Complex(0,0);
/*
这种方法有点缺陷就是,由于我们明确地把MoreComplex.prototype设成了我们所创建的一个对象
所以就覆盖了javascript提供的原型对象,而且抛弃了给定的constructor属性,该属性引用的是创建
这个对象的构造函数,但是MoreComplex对象继承了他的超类的constructor属性,他自己并没有这个
属性。明确地设置这一属性可以解决这一问题。
*/
MoreComplex.prototype.constructor=MoreComplex;
//注意:以上方法在javascript1.1中
//下面是给子类添加新方法或新特性
MoreComplex.prototype.swap=function(){
 var tmp=this.x;
 this.x=this.y;
 this.y=tmp;
}

var m=new MoreComplex(3.0,5.6);
document.write("<br />"+m.toString());
var n=m;
m.swap();
document.write("<br />"+m.toString());
n.swap();
document.write("<br />"+n.toString());
var i=n.magitude();
document.write("<br />"+i);


//关联数组的对象
function Test()
{
  document.write("x:"+n["x"]+"y:"+n["y"]);
 
}
Test();
//以上引用属性的方法成功,在实际的使用中就可以灵活的访问和添加类的属性了
//以上表明了javascript除了可以像c++和Java一样使用"."来取属性,同时作为关联数组
//也表现出出色的性能


 </script>

原文地址:https://www.cnblogs.com/itelite/p/1034693.html