现在就来列举一下其中的四种方式,并且罗列出了每种方式的优缺点,可以让大家进行选择使用,下面来看看。
1.工厂化模式
function createPerson(name, age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj; //一定要返回,否则打印undefined:undefined
}
var person1 = new createPerson('Young',18);
console.log(person1.name + ':' + person1.age);
可以解决创建多个相似对象
没有解决对象识别问题
2.构造函数创建对象
function Person(){
//在执行第一行代码欠,js引擎会为我们生成一个对象
this.username = "zhangsan";
this.password = "123";
this.getInfo = function(){
alert(this.username + ", " + this.password);
}
//此处有一个隐藏的return语句,用于将之前生成对象返回。
}
var p1 = new Person();
p1.getInfo();
//带参数
function Person(username, password){
this.username = username;
this.password = password;
this.getInfo = function(){
alert(this.username + ", " + this.password);
}
}
var p1 = new Person("zhangsan","1234546");
p1.getInfo();
3.原型方式`
function Person(){}
Person.prototype.username = "zhangsan";
Person.prototype.password = "123456";
Person.prototype.getInfo = function(){
alert(this.username + ", " + this.password);
}
var person = new Person();
var person2 = new Person();
person.username = "haha";
person.getInfo();
person2.getInfo();
//单纯使用原型方式定义对象无法在构造函数中为属性赋值,只能在对象生成后再去改变属性值
function Person(){}
Person.prototype.username = new Array();
Person.prototype.password = "123456";
Person.prototype.getInfo = function(){
alert(this.username + ", " + this.password);
}
var person = new Person();
var person2 = new Person();
person.username.push("zhangsan");
person.username.push("lisi");
person.password = "321";
person.getInfo();
person2.getInfo();
//执行结果:zhangsan lisi 321, zhangsan lisi 123456
4.综合方式
function Person(){
this.username = new Array();//不被多个对象共享
this.password = "123";
}
Person.prototype.getInfo = function()//被多个对象共享
{
alert(this.username + "," + this.password);
}
var p1 = new Person();
var p2 = new Person();
p1.username.push("zhangsan");
p2.username.push("lisi");
p1.getInfo();
p2.getInfo();