• js创建对象的几种方式


    本来想刷一道codewar上的算法题来着,结果看了半天没搞定,水平太菜伤不起啊,心里默念三声:我还会回来的。然后还是乖乖的总结一下js创建对象的几种方式:

    no1. 对象字面量:

    这种方法平时用的相对较多,举个栗子:

     var person={
       name:'robert',
       job:'web develop',
       sex:'male',
       skill:funcion(){
           console.log('just coding')
      }         
    };

      这种方法简单粗暴,谁用谁知道,缺点也是相当明显,不能复用。

    no2.Oject构造函数:

    此方法没有汲取对象字面量的优点,而且还保留了对象字面量的缺点

    var person=new Object();
       person.name='robert';
       person.job='web develop';
       person.sex='male';
       person.skill=funcion(){
           console.log('just coding')
      };   

    no3. 工厂模式:

    工厂模式就有意思多了,通过封装的函数创建一个新对象,最后返回对象,还可以通过参数改变新对象的属性值。

    function factory(name,job,sex){
       var obj=new Object();
       obj.name= name;
       obj.job= job;
       obj.sex= sex;
       obj.skill=function(){
             console.log('hello world')
       };
    return obj;
    }
    var person = factory('robert','web develop','male');

     代码可复用了,还可以定制属性值,美滋滋 

    no4. 构造函数模式:

    工厂模式每次都要创建一个对象并返回,构造函数模式表示完全不用那么麻烦,每次只需new一下就好了。

    function Person(name,job,sex){
       this.name= name;
       this.job= job;
       this.sex= sex;
       this.skill=function(){
             console.log('hello world')
       };
    }
    var person = new Person('robert','web develop','male');
    

    no5. 原型模式:

    原型模式看了构造函数模式后笑笑,怜悯地说道:‘你的方法根本就没有共享,我来改进一下吧’;

    function Person(){}
       Person.prototype.name= 'robert';
       Person.prototype.job= 'web develop';
       Person.prototype.sex= 'male';
       Person.prototype.skill=function(){
             console.log('hello world')
       };
    var person = new Person();
    

     不错是不错,属性和方法都共用了,并不是我们想要的,结合原型模式和构造函数模式的优点,合二为一,混合模式登场

    no6. 混合模式:

    多说无益,还是直接show code 好了,

    function Person(name,job,sex){
       this.name= name;
       this.job= job;
       this.sex= sex;
    }
    Person.prototype.skill=function(){
       console.log('hello world')
    };
    var person = new Person('robert','web develop','male');
    

    一句话总结:属性定制,方法共享

  • 相关阅读:
    HashMap 和 Hashtable 的区别
    使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
    short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
    io--文件内容的复制
    heap与stack的区别
    序列化与反序列化
    实现反转的方法(reverse)
    final, finally, finalize 的区别
    request.getSession()、reqeust.getSession(false)和request.getSession(true)
    如何优化网页的加载速度
  • 原文地址:https://www.cnblogs.com/renbo/p/8454546.html
Copyright © 2020-2023  润新知