• JS中创建对象的几种方式


    每一个对象都是引用类型创建的。

    一、工厂模式

     1             function createPerson(){
     2                 var o=new Object();
     3                 o.name=name;
     4                 o.sex=sex;
     5                 o.sayName=function(){
     6                     alert(this.name);
     7                 }
     8                 return o;
     9             }
    10             
    11             var person1=new createPerson('zhangsan','男');
    12             var person2=new createPerson('wangwu','女');

    特点:1、用函数来封装,并以特定接口创建对象;2、有返回值

    缺点:虽然解决了创建多个对象的问题,但没有解决对象识别的问题(怎样知道一个对象的类型)

    二、构造函数模式(通过this实现)

    用构造函数可以创建特定类型的对象,同时也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。

     1             function Person(name,age){
     2                 this.name=name;
     3                 this.age=age;
     4                 this.sayName=function(){
     5                     alert(this.name);
     6                 }
     7             };
     8             
     9             var person1=new Person('zhangsan',20);
    10             var person2=new Person('wangwu',15);

    与工厂模式的区别在于:

    1、没有显式地创建对象;

    2、直接将属性和方法赋给了this对象

    3、没有return语句

    三、原型模式(通过原型对象实现)

    创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象包含了所有实例共享的属性和方法。

    因此可以将属性和方法放在原型对象里面,让所有实例都可以共享。

     1             function Person(){};
     2             
     3             Person.prototype.name='zhangsan';
     4             Person.prototype.age=20;
     5             Person.prototype.sayName=function(){
     6                 alert(this.name);
     7             }
     8             
     9             var person1=new Person();
    10             person1.sayName();   //zhangsan
    11             
    12             var person2=new Person();
    13             person2.sayName();   //zhangsan

    先新建一个空的构造函数,然后将属性和方法添加到原型对象里面,再创建实例对象,实例对象就拥有了原型对象里的属性和方法。不管创建多少个实例对象,原型对象里的属性和方法都是共享的。

    四、组合构造函数模式和原型模式

    构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性

     1             function Person(name,age){      //构造函数模式
     2                 this.name=name;
     3                 this.age=age;
     4                 this.friends=['shelly','lucy'];
     5             };
     6             
     7             Person.prototype.sayName=function(){      //原型模式
     8                 alert(this.name);
     9             }
    10             
    11             var person1=new Person('zhangsan',20);      //构造函数模式
    12             var person2=new Person('wangwu',15);
    13             
    14             person1.friends.push('van');
    15             alert(person1.friends);   //shelly,lucy,van
    16             alert(person2.friends);   //shelly,lucy

    五、动态原型模式

    就是将所有代码装在一起

    六、寄生构造函数模式

     1             function Person(){
     2                 var o=new Object();
     3                 o.name=name;
     4                 o.sex=sex;
     5                 o.sayName=function(){
     6                     alert(this.name);
     7                 }
     8                 return o;
     9             }
    10             
    11             var person1=new Person('zhangsan','男');
    12             var person2=new Person('wangwu','女');

    跟工厂模式很像,但是是构造函数创建得

    七、稳妥构造函数模式

  • 相关阅读:
    工作流程在线编辑
    利用IIS导出,导入快速部署 web站点
    调用CRM自己的Dialogue
    简单粗爆的解决同时布CRM引起的死锁问题
    CRM 2013 自动发送报表
    CRM 2013 中业务流程的
    调试CRM JS开发
    CRM ribbon按钮上引用JS库
    CRM Look Up 解决方案
    Windows Azure 上传 VM
  • 原文地址:https://www.cnblogs.com/endlessmy/p/8597092.html
Copyright © 2020-2023  润新知