标签:自定义 12px uri setname asc 工厂 creat log 还需要
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)
标签:自定义 12px uri setname asc 工厂 creat log 还需要
原文地址:http://www.cnblogs.com/lonecloud/p/7587206.html