ECMAScript创建对象

来源:互联网 发布:2016农村金融数据报告 编辑:程序博客网 时间:2024/06/05 07:09

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

【创建一个对象】

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

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); //返回turealert(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); //返回objectalert(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.返回新对象(后台直接返回)

原创粉丝点击