Javascript高级程序设计 笔记(四) javascript对象创建

类创建方法

  工厂方法模式:方法缺陷,没有new,与习惯不符,并且对象方法定义在外部,不太好。如果定义在内部,则每个对象都有个函数对象,浪费内存。

function showColor(){
    alert(this.color);
}

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

var oCar = createCar("red",4,23);
oCar.showColor();

  构造函数方式:方法缺陷,还是方法定义在外部不太好

function showColor(){   //定义在外面,可以防止每个对象都创建一个函数对象
    alert(this.color);
}

function Car( sColor, iDoors ,iMpg){   //构造函数一般首字母大写,来区分其它普通函数
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.showColor = showColor;
} //默认返回this

var oCar = new Car("red", 4 ,23);   //使用new调用构造函数时,第一行代码执行执之前首先创建了一个对象
oCar.showColor();

  原型方法:缺点,函数的定义定义在内部,并且所有的类共享一个函数对象。但是构造函数不能再指定参数了。并且,原型如果属性是对象的话会在不同对象之间共享

 

function Car(){    //只是定义了类名
}

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

var oCar = new Car();

 

  混合的构造函数:非函数属性用构造函数定义,函数属性用原型方式指定。缺点:还是不太符合oop程序员的编程观念,因为诸如java之类的编程语言将函数和属性封装一起

function Car( sColor, iDoors ,iMpg){ 
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.showColor = showColor;
}
Car.prototype.showColor = function(){
    alert(this.color);
}
var oCar = new Car("red", 4 ,23); //使用new调用构造函数时,第一行代码执行执之 oCar.showColor();

  最终版:其实还是前一个版本常用

function Car( sColor, iDoors ,iMpg){ 
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.showColor = showColor;
    if( typeof this._init_== "undefined"){
        Car.prototype.showColor = function(){
            alert(this.color);
        }
    };
    _init = true;
}

  

转载于:https://www.cnblogs.com/linpeng/archive/2012/06/23/2559582.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值