ECMAScript创建对象

        创建对象不同方法之间的联系

【创建一个对象】

创建对象且给该对象新建属相和方法

var box=new Object();
box.name='lee';
box.age=56;
box.run=function(){
    return this.name+this.age+'运行中...';
};
alert(box.run());

以上就新建了一个对象,但此时如果还想新建一个类似的对象,还需写如下代码

box1=box;
box1.name='shuang';
box1.age=18;
box1.run=function(){
    return this.name+this.age+'运行中...';
};
alert(box1.run());

    如果我还想创建更多的类似于box对象的对象,还得重复上面的代码,不难发现,这样产生了大量的重复代码,且这样是引用类型,box1=box;box1得到的是box的引用,当box1重新赋值时,box的值也改变了,为解决此问题,引出第2中创建对象的方法

【工厂模式创建对象】

function createObject(name,age)
{
    var obj=new Object();
    obj.name=name;
    obj.age=age;
    obj.run=function(){
        return obj.name+obj.age+'运行中...';
    };
    return obj;
}

创建新对象

var box1=createObject('lee',18);
var box2=createObject('shuang',22);

调用新对象的方法:

alert(box1.run());
alert(box2.run());

    由上面可以看出,工厂模式创建新对象时用的代码远远比第一种方法要少,所以工厂模式的
    优点:解决了创建新对象时要写大量的重复代码
    缺点:无法识别创建的哪个对象的实例

alert(box1 instanceof Object); //返回ture
alert(typeof box1); //返回object

    由上面可得,只能知道box1是object类型,但不知道是具体的哪个对象,又为解决此问题,引出下面的方法
    在此个人理解的工厂模式就是:先创建一个方法,该方法的作用是创建对象,且把方法的参数传递给方法里面创建的对象的属性或方法,且把该对象返回,当想创建多个类似的对象时,直接调用该方法传参,即可创建新对象

【构造函数创建对象】

function Box(name,age){
    this.name=name;
    this.age=age;
    this.run=function()
    {
        return this.name+this.age+'运行中';
    };
}

构造函数创建实例对象的方法:

var box1=new Box('lee',20);
var box2=new Box('shuang',18);

优点:
    - 解决了重复实例化的问题
    - 解决了对象识别的问题

alert(typeof box1); //返回object
alert(box1 instanceof Box); //返回true,由此可知道是实例化的BOX

构造函数的特点
    - 创建对象时必须使用new,否则就是普通函数调用,也是无效的
    - 为与普通函数区别,构造函数名首字母大写

与工厂模式的区别
    - 没有使用new Object()创建对象,所以也没有retruen 对象语句
    - 直接将属性和方法赋值给this对象

构造函数为什么能创建对象???
    因为创建对象一般用new Object(),但构造函数又没有new Object(),那么问题来了,创建的对象从那里来的???执行过程时这样的:
    1.当new 构造函数时,后台自动执行了new Object(),这时会将构造函数的作用域赋给新对象,也就是new Object()创建出来的对象,而构造函数体内的this就代表new Object()出来的对象所以构造函数体内作用域必须写this ,写别的无效
    2.执行构造函数内的代码
    3.返回新对象(后台直接返回)

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值