1、字面量方式创建,也就是我们所常说的基本创建方式
但是这个方式有一个缺点,就是要创建多个对象的时候,需要每一个对象里面的属性都要重新声明一下,直接向中添加属性和方法,这样就造成了代码的冗余,而且这样创建对象的话,也必须先知道对象的属性和方法,否则无法创建;
var object = new Object();
object.name='lili';
//向对象中添加属性和方法
object.sayName =function(name){
this.name = name;
}
object.sayName('wawa');
alert(object.name);
//意思一样
var object ={
name:'lili',
sayName:function(name){
console.log(this);
this.name=name;
}
}
2、工厂模式创建对象
这种方法创建对象可以大批量的创建,通过函数返回一个对象的方式创建对象,并且对象的属性都是一样的,有点像工厂的流水线,一成不变的,所以一般我们叫这种方式为工厂模式。这种方式的缺点是无法知道对象的类型。
function creatObject(name,gender){
var object ={
name:name,
gender:gender,
find:function(){
console.log(this.name+','+this.gender);
}
}
return object;
}
var object1 = creatObject('lisi',15);
var object2 = creatObject('zhasgan',18);
object1.find();//lisi,15
object2.find();//zhasgan,18
3、构造模式创建对象(开头字母一般大写)
这种方法创建对象创建的每一个对象的类型不同,缺点就是每一个对象的方法都确定了,无法更改,智能通过修改构造函数进行修改。
function CreateObject(name,gender){
this.name = name;
this.gender = gender;
this.find=function(){
console.log(this.name+','+this.gender);
}
}
var obj1 = new CreateObject('lili',14);
var obj2 = new CreateObject('wawa',15);
obj1.find(); //lili,14
obj2.find();//wawa,15
4、原型模式创建对象
原型模式创建的所有对象实例都会共享他们的属性和方法,但是也可以根据不同对象的需要给对象的属性进行覆盖,这样就可以实现自定的其他对象的属性。
function Person(){
}
Person.prototype.name="a";
Person.prototype.age="29";
Person.prototype.job="cc";
Person.prototype.sayname = function(){
alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
console.log(person1)//{}
console.log(person1.name)//a
5、原型模式和构造函数模式结合创建对象
function Student(name,gender){
this.name = name;
this.gender = gender;
}
Student.prototype.find=function(){
console.log(this.name);
}
var p1=new Student('lili',12);
var p2=new Student('wawa',13);