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)
js创建对象的几种方式
原文地址:http://www.cnblogs.com/lonecloud/p/7587206.html