javascript面向对象实现

测试环境:windows 2003 , ie 6.0

1 面向对象的特性

类,对象变量,对象方法,类变量,类方法,继承,多态 

1) 类
  在javascript中类的定义格式跟函数的定义是一样的,都是用关键字function。
例子:
function classA(){
    this.X= "this.X";
}
类的实例化:var obj = new classA();

2) 对象变量
  格式:
this.X= "this.X";

 对象变量只有在类实例化后才能引用,如:new classA().X;

3) 对象方法
   格式:
this.methodAdd = function(){
     alert("this.methodAdd ");
}
还有一种方式是(我理解为对象的全局方法):
classA.prototype.methodAdd = function(){
     alert("classA.prototype.methodAdd ");
}
如果一个类里这两种方式都定义了,会优先调用前一种方法。
(你可以把prototype看作基类。prototype里面的变量或方法,是所有对象共享的。 比如,c.area()调用最终就会让解释器调用到Circle.prototype.area(). 相比于java和c++,javascript具有他们都没有的一个语义,也就是你可以在prototype里定义变量。定义在prototype里的变量可以被所有的实例共享量。所以一般它应该是一个常数,比如:Circle.prototype.PI = 3.14.显然,prototype里的变量和方法都应该是不变的。每一个对象实例都不应该取修改prototype中的内容。虽然语言允许你可以这样做,但这样做没有任何意义,也违反了面向对象的语义(想想,java会让你动态修改一个类的方法吗)。 )

4) 类变量
 

类变量是属于一个类的变量。就像java里用static修饰的变量。因为它属于类,所以它也应该是一个常量。实例不应该去修改它,虽然你可以(java里可以用final修饰,使得类变量一旦定义,就不能修改)。这里可以看到,类变量和prototype里定义的变量的功能是相似的。确实如此,他们的目的都是一样的。但他们的访问方式

不一样。比如:

Circle.prototype.PI = 3.14;
Circle.PI = 3.14;
//用prototype里的变量
Circle.prototype.area1 = function() { return this.PI * this.r * this.r; }
//用类变量
Circle.prototype.area2 = function() { return Circle.PI * this.r * this.r; }

5) 类方法
  格式:
  classA.methodAdd = function(){
     alert("classA.methodAdd ");
}

6) 继承
   function Base(){      
   }
   function A(){
   } A.prototype = new Base();

7) 多态
function Base(){
      this.methodA = function(){alert("Base.this.methodA");}
   }
   function A(){
     this.methodA = function(){alert("A.this.methodA");}
   } A.prototype = new Base();

   var obj= new A();
   obj.methodA();//输出:A.this.methodA

虽然javascript模拟了面向对象的特性,但它毕竟只是基于对象的语言,很多面向对象的特性都不支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值