Object构造函数:
/**1.通过Object构造函数
* 先创建空Object对象,再动态添加属性(方法)
* 适用于起始时不确定内部数据的对象
* 语句过多
*/
var doggy = new Object();
doggy.name = "doggy";
doggy.age = 18;
doggy.setNum = function (num) {
this.num = num;
};
对象字面量:
/**2.对象字面量:
* 使用{}创建对象,同时指定属性(方法)
* 适用于起始时对象内部数据是确定的
* 创建多个对象时,产生重复代码
*/
var doggy = {
name: "doggy",
age: 18,
setNum: function (num) {
this.num = num;
}
};
工厂模式:
/**3.工厂模式:
* 通过工厂函数创建对象并返回
* 适用于需要创建多个对象时
* 对象没有具体的属性,都为Object类型
*/
function creatObj(name, age) {
var obj = {
name: name,
age: age,
setNum: function (num) {
this.num = num;
}
};
return obj; //工厂函数返回所创建的对象
}
自定义构造函数:
/**4.自定义构造函数:
* 自定义构造函数,通过new创建对象
* 适用于需要创建类型确定的对象
* 每个对象都有相同的方法,浪费内存
*/
function Doggy(name, age) { //对象的具体类型为Doggy
this.name = name;
this.age = age;
this.setNum = function (num) { //每个对象都有相同的setNum方法
this.num = num;
};
}
var dog = new Doggy('doggy', 18); //通过new创建对象
console.log(dog);
构造函数+原型:
/**5.自定义构造函数+原型:
* 自定义构造函数,属性在构造函数中初始化,方法存放于原型中
* 适用于需要创建多个类型确定的对象
*/
function Doggy(name, age) {
this.name = name;
this.age = age;
}
Doggy.prototype.setNum = function (num) { //方法存于原型中
this.num = num;
};