zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》阅读笔记(十三):定义类或对象

    工厂方式

      创建并返回特定类型的对象。  

    function createCar(sColor,iDoors,iMpg){
    var oTempCar=new Object();
    oTempCar.color=sColor;
    oTempCar.doors=iDoors;
    oTempCar.mpg=iMpg;
    oTempCar.showColor=function(){
    alert(this.color);
    }
    return oTempCar;
    }

      调用示例:

    var oCar1=createCar("red",4,23);
    var oCar2=createCar("blue",3,25);
    oCar1.showColor();
    oCar2.showColor();

      缺点:方法重复创建了。如在上面的调用示例中,oCar1和oCar2均有自己的shoColor方法,但这个是可以共用的。

    构造函数方式

      示例:

    function Car(sColor,iDoors,iMpg){
    this.color=sColor;
    this.door=iDoors;
    this.mpg=iMpg;
    this.showColor=function(){
    alert(this.color);
    }
    }

      调用示例:

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

      缺点:跟工厂方式一样,方法重复创建了。

    原型方式

      本方式利用了对象的 prototype 属性,可把它看成创建新对象所依赖的原型。这里用空构造函数来设置类名,然后所有的属性和方法都被直接赋予 prototype 属性,重写前面的例子,代码如下:

    function Car(){
    }

    Car.prototype.color="red";
    Car.prototype.doors=4;
    Car.prototype.mpg=23;
    Car.prototype.showColor=function(){
    alert(this.color);
    }

      调用:

    var oCar1=new Car();
    var oCar2=new Car();

      缺点:不能通过给构造函数传递参数初始化属性的值

    混合的构造函数/原型方式

      联合使用构造函数和原型方式,示例如下:

    function Car(sColor,iDoors,iMpg){
    this.color=sColor;
    this.door=iDoors;
    this.mpg=iMpg;
    }

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

      调用示例:

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

      优点:无内存浪费,创建方便。

      这种方式是ECMAScript采用的主要方式。

    动态原型方法

      使用混合的构造函数/原型方式把对象的方法放在了对象外面定义,让人感觉不是那么面向对象,没有在视觉上进行很好的封装,因此产生了动态原型方法:

    function Car(sColor,iDoors,iMpg){
    this.color=sColor;
    this.door=iDoors;
    this.mpg=iMpg;
    if(typeof Car._initialized=="undefined"){
    Car.prototype.showColor=function(){
    alert(this.color);
    };
    Car._initialized=true;
    }
    }
  • 相关阅读:
    图像融合之拉普拉斯融合(laplacian blending)
    真实场景的虚拟视点合成(View Synthsis)详解
    真实场景的双目立体匹配(Stereo Matching)获取深度图详解
    OpenCV亚像素角点cornerSubPixel()源代码分析
    OpenCV角点检测goodFeaturesToTrack()源代码分析
    OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
    引导图滤波(Guided Image Filtering)原理以及OpenCV实现
    OpenCV3.4两种立体匹配算法效果对比
    文件操作常用函数
    two Pass方法连通域检测
  • 原文地址:https://www.cnblogs.com/artwl/p/2426082.html
Copyright © 2011-2022 走看看