zoukankan      html  css  js  c++  java
  • javascript 里的类实现

    摘抄自《javascript高级程序设计》一书。
    javascript 是面向对象的语言,自然也有面向对象的一些特性。
    一:构造函数方式
    第一步选择类名,即构造函数的名字。下面的例子在构造函数里不创造对象,而是使用this,使用new 运算符调用构造函数的时候在执行第一行代码前先创建一个对象,这个对象只能用this访问,然后可以直接赋予this属性,默认情况下是构造函数的返回值,不必return。
     例子:
    function Car(sColor,iDoors)
    {
        
    this.color = sColor;
        
    this.doors = iDoors;
        
    this.showColor = function()
        
    {
            alert(
    this.color);
        }
    ;
    }

    var oCar1 = new Car("red",4);//output red
    var oCar2 = new Car("blue",3);//output blue
    上面的例子会为每个对象都创建独立的函数版本。再看下面的原型方式
    二:原型方式:
    该方式利用对象的prototype属性,可把它看成创建新对象所依赖的原型。下面的例子使用空构造函数设置类名,然后所有的属性和方法都直接赋予prototype属性。在调用new Car()的时候原型的所有属性都被立即赋予要创建的对象。
    例子:
    function Car()
    {
    }

    Car.prototype.color 
    = "red";
    Car.prototype.doors 
    = 4;
    Car.prototype.showColor 
    = function()
    {
         alert(
    this.color);
    }
    ;
    var oCar1 = new Car();//output red
    上面的例子在创建多个实例后,对象的属性值并没有变。再看下面的混合的构造函数/原型方式
    三:混合的构造函数/原型方式:
    联合使用构造函数和原型方式,就可以像其他程序设计语言杨创建对象。使用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性。
    function Car(sColor,iDoors)
    {
        
    this.color = sColor;
        
    this.doors = iDoors;
    }

    Car.prototype.showColor 
    = function()
    {
         alert(
    this.color);
    }
    ;

    var oCar1 = new Car("red",4);
    var oCar2 = new Car("blue",3);

    oCar1.showColor();
    //output red
    oCar2.showColor();//output blue

    四:动态原型方法:
    动态原型方法的基本想法和混合的构造函数/原型方式相同,唯一的区别是赋予对象方法的位置,看下面的例子:
    function Car(sColor,iDoors)
    {
        
    this.color = sColor;
        
    this.doors = iDoors;
        
    if(typeof Car.initialized == "undefined")//***
        {
            Car.prototype.showColor 
    = function()
            
    {
                 alert(
    this.color);
            }
    ;
            Car.initialized 
    = true;//***
        }

    }

    上面的方法使用标志initialized来判断是否已给原型赋予任何方法,该方法只创建并赋值一次。

    五:混合工厂方式
    这种方式的目的是创建假构造函数,只返回一种对象的新实例:
    function Car()
    {
        
    var tempCar = new Object;
        tempCar.color 
    = "red";
        tempCar.doors 
    = 4;
        tempCar.showColor 
    = function()
        
    {
           alert(
    this.color);
        }
    ;
        
    return tempCar;
    }

    var oCar1 = new Car();

    由于在Car()构造函数内部调用了new运算符,所以将忽略构造函数外的第2个new 运算符。不建议使用这种方式。

    可以使用prototype属性为任何已有的类定义新的方法。

    TrackBack:http://www.cnblogs.com/doll-net/archive/2007/05/18/751811.html

  • 相关阅读:
    jsp常用指令
    jsp中的内置对象(9个)、作用
    collection的框架结构
    java——异常
    Spring的依赖注入(DI)三种方式
    mybatis——动态sql
    spring 中事务的PROPAGATION_REQUIRED,Readonly的解释
    Jquery ajax提交表单几种方法详解
    springmvc注解和参数传递
    springmvc和struts2的区别
  • 原文地址:https://www.cnblogs.com/hdjjun/p/1223747.html
Copyright © 2011-2022 走看看