js创建对象的几种方式

1.通过new Object创建对象

作用范围:
用于属性名字和属性值不能确定的地方
优点:
  编写方便
缺点:
1.需要写大量代码
2.创建出来的对象都是Object对象
    var obj = new Object();
    obj.name = "张三"
    obj.age = 12;
    obj.setName=function (name) {
        this.name=name;
    }
    log(obj.name, obj.age);

 2.使用{}创建对象

适用场景:
适用于确定对象,确定方法,不需要创建很多个对象
优点:
书写方便
缺点:
1.不利于扩展性
2.每次创建对象还需要有很多重复性的工作
3.浪费内存
   var obj = {
        name: "张三",
        age: 12,
        setName: function (name) {
            this.name = name;
        }
    }
    log(obj.name,obj.age)

 3.使用工厂方法创建对象

适用场景:
用于有固定的属性的对象进行创建,不用在意其创建的对象是不是Object类型还是自定义类型
优点:
创建速度快,代码便捷
缺点:
浪费内存
所有实例都是Object的实例对象
    function createPerson(name, age) {
        return {
            name: name,
            age: age,
            setName: function (name) {
                this.name = name;
            }
        }
    }
    var p=createPerson("张三",12);
    log(p.name,p.age);

 4.使用函数创建对象

适用范围:
用于创建多个对象,并且有自己的实例对象属性
优点:
不是一直都是Object对象,可以是自己创建的对象
缺点:
1.浪费内存,特别是公用方法
    function Person(name,age) {
        this.name=name;
        this.age=age;
        this.setName=function (name) {
            this.name=name;
        }
    }
    var p=new Person("张三",11);
    log(p.name,p.age)

 5.原型链和函数进行创建对象

适用场景:
用于对于有公共方法的对象
优点:
优化内存,将方法放在了prototype中
缺点:
未涉及字段
    function Person(name,age) {
        this.name=name;
        this.age=age;
    }
    Person.prototype.setName=function (name) {
        this.name=name;
    }
    var p=new Person("小米",12);
    log(p);
    log(p instanceof Person)
原文地址:https://www.cnblogs.com/lonecloud/p/7587206.html