JavaScript学习之--Javascript类对象

一,对象定义

ECMAScript-262把对象定义为:属性的无序集合,每个属性存放一个原始值、对象或函数。严格来说,对象是无特定顺序的值的数组。每个对象都由类定义,类不仅要定义对象的接口,还要定义对象的内部工作。编译器和解释程序都根据类的说明构建对象。对象是类的实例,由类创建对象的过程叫实例化。JS中对象定义存放在一个函数---构造函数中,构造函数不是一种特殊函数,它只不过是用于创建对象的常规函数。

二,对象声明,实例化,销毁,对象绑定

    对象实例化:var obj = new Object(); <==> var obj = new Object;  //无参数时括号可以省略。

    对象销毁:var obj = new Object; obj = null;//使对象指向null。

    绑定:把对象的接口与对象实例结合在一起的方法。

    早绑定:在实例化对象之前定义它的特性和方法,这样编译器或解释器就能提前转换机器代码,这种机制在强类型语言中使用。JavaScript是弱类型语言,所次支持早绑定。

    晚绑定:在编译器或解释器运行前,不知道对象的类型,使用晚绑定,无需检查对象的类型,只要检查对象是否支持特性和方法。

三,对象类型

   ECMAScript中所有对象并非同等创建的,可以创建的并使用的对象有三种。

   1,本地对象:ECMAScript定义的类。如Object,Function,Array,String等。

   2,内置对象:由ECMAScript提供,独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。ECMA-a62只定义了两个内置对象:Global和Math(它们也是本地对象)。每个内置对象都是本地对象。

   3,宿主对象:由ECMAScript实现的宿主环境提供的对象。如所有BOM和DOM对象。

四,定义类或对象

   1,工厂方式

         function Factory(){//也可以加参数

            var obj = new Object;

             obj.color=”red”;

             obj.ShowColor=functon(){

                 alert(this.color);

             };

             return obj;

         }

       var test = Factory();

   2,构造函数

         function Car(sColor){

            this.color=sColor;

            this.ShowColor=function(){

                alert(this.color); 

             }

          }

   3,原型方式

         function Car(){}

         Car.propotype.color=’red’;

         Car.propotype.ShowColor=function(){ alert(this.color); }

   4,混合构造函数和原型方式

         function Car(sColor){

            this.color=sColor;

         }

        Car.propotype.ShowColor=function(){ alert(this.color); }

   5,动态原型方式

          function Car(sColor){

            this.color=sColor;

            if(typeof Car.__initialized__ == ‘undefined’){

            this.ShowColor=function(){

                alert(this.color); 

             }

            Car.__initialized__ ==true;

           }

          }

   6,混合工厂方式

          function Factory(){//也可以加参数

            var obj = new Object;

             obj.color=”red”;

             obj.ShowColor=functon(){

                 alert(this.color);

             };

             return obj;

         }

       var test = new Factory();  //实例化时加new 通常这个new会被忽略。

当然这几种方式也可以混合使用。

posted @ 2010-07-24 14:42  无很  阅读(263)  评论(0编辑  收藏  举报