1.字面量形式创建对象
var obj={};
obj.name="lily";
obj.run=function(){
console.log(this.name+"is running");
}
优点:简单易懂,方便
缺点:不能批量创建,也不能被识别为哪一类别
2.实例创建对象
var obj=new Object();
obj.name="lily";
obj.run=function(){
console.log(this.name+"is running");
}
优缺点同上
3.工厂模式创建对象
function createObject(name,age){
var obj={};
obj.name=name;
obj.age=age;
obj.run=function(){
console.log(this.name+"is running");
}
return obj
}
var obj=createObject("lily",20);
obj.run();
优点:可以批量创建对象
缺点:不能解决对象无法识别的问题
4.构造函数创建对象
function Person(name,age){
this.name=name;
this.age=age;
this.run=function(){
console.log(this.name+"is running");
}
}
var p1=new Person("lily",20);
p1.run();
优点:可以批量创建对象,能够解决识别问题,是一种常用的创建对象方法
缺点:每创建一次对象,对象里的函数也被创建一次,造成内存浪费的情况
5.原型方式创建对象
function Person(){}
Person.prototype.name="lily";
Person.prototype.run=function(){
console.log("run");
}
优点:原型是函数的一个属性,里面的内容可被对象的所有实例共享,减少内存浪费
缺点:一般不在原型中添加属性
6.混合模式创建对象
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.run=funcion(){
console.log(this.name+"is running");
}
优点:即可批量创建对象,也可解决识别问题,创建的函数也不会造成内存浪费,是一种理想的创建对象方式
缺点:分成了两部分,有一种割裂感
7.动态混合模式创建对象
function Person(name,age){
this.name=name;
this.age=age;
if(Person.prototype.run==undifend){
Person.prototype.run=function(){
console.log(this.name+"run");
}
}
}
优点:解决了6中的问题