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;
    }
    }
  • 相关阅读:
    一网友推荐的书:框架设计(第2版):CLR Via C#
    线程与WinForm设计,防冻结,卡住窗体
    通用数据库操作辅助类DbHelper
    高级着色器语言(High Level Shader Language,简称HLSL)
    无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
    根据RGB,计算灰度值
    温故而知新:WinForm/Silverlight多线程编程中如何更新UI控件的值
    [原创视频]PHP在netbeans中的简单使用
    自己封装的ASP.NET的SQLITE数据库的操作类
    《JavaScript征途》读后感
  • 原文地址:https://www.cnblogs.com/artwl/p/2426082.html
Copyright © 2011-2022 走看看