1. 对象字面量
var obj={ name:'syl', height:'175', say:function(){ console.log('hello'); } }
缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高
2. 内置构造函数
2.1 直接使用Object();
var obj=new Object({ name:'syl', height:'175', say:function(){ console.log('hello'); } });
缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高
2.2 封装Object()—工厂模式
function createObj(name,height){ var obj=new Object({ name:'syl', height:'175', say:function(){ console.log(this.name); } }); return obj; }
缺点:对象无法识别,因为所有的实例都指向一个原型。
3. Object.create()
var p = { name:'syl', height:'175', say:function(){ console.log(this.name); } }; var obj = Object.create(p);
4 构造函数
function P(name,height){ this.name=name; this.height=height; this.say=function(){ console.log(this.name); }; } var obj=new P('syl','175'); obj.sayHeight()=function(){ console.log(this.height); }
缺点:构造函数中定义函数,那么每次创建对象,都会重新创建该函数,这样会导致全局变量增多。
原型
function P(name,height){ this.name=name; this.height=height; } P.prototype.say=function(){ cosole.log(this,name); } var obj=new P('syl','175'); p.say();
将函数放到原型中,解决了构造函数方法的缺点。