JavaScript总结--创建对象

      在JavaScript中创建对象主要就是用以下三种语句

  1. var box=new Object(); 或var box=Object();
  2. var box={};//字面量
  3. function Box(){};//构造函数

      现在,我们就牛刀小试,来创建一个对象

var man=new Object();//创建Object对象的实例:man
man.name='Mr.Q';//man对象的name属性
man.sex=30;//man对象的name
man.work=function(){
return this.name+' is working.';
};
alert(man instanceof Object);//true 是Object对象的实例
alert(man.work());//Mr.Q is working.

      如果要创建和以上对象类似的对象怎么办?

      方案一:直接赋值;缺点:会覆盖原来对象

var woman=man;
woman.name='Ms.L';//man对象的name属性
woman.sex=21;//man对象的name
woman.work=function(){
return this.name+' is working.';
};
alert(woman.name);//Ms.L 会将man对象的name属性覆盖掉

      

      方案二:用相同的方式再实例化一个对象;缺点:会产生大量重复代码

var woman=new Object();//创建Object对象的实例:man
woman.name='Ms.L';//man对象的name属性
woman.sex=21;//man对象的name
woman.work=function(){
return this.name+' is working.';
};
alert(woman.work());//Mr.Q is working.

      优化一:工厂模式:解决实例化大量类似对象产生重复代码问题

function createobject(name,sex){
var obj=new Object();
obj.name=name;
obj.sex=sex;
obj.work=function(){
return this.name+' is working';
};
return obj;
}
var man=createobject('Mr.Q',30);
var woman=createobject('Ms.L',21);
alert(man.work());
alert(woman.work());

           弊端: 因为是工厂模式嘛!批量生产,产品都一个样。对象之间无法区分,他们全都是Object对象的实例。
      优化二:构造函数解决重复实例化和对象识别问题

function Person(name,sex){//人类
this.name=name;
this.sex=sex;
this.work=function(){
return this.name+' is working';
};
}
var man=new Person('Mr.Q','男');
var woman=new Person('Ms.L','女');
alert(man instanceof Object);
alert(man instanceof Person);

function ET(name,sex){//外星人
this.name=name;
this.sex=sex;
this.work=function(){
return this.name+' is working';
};
}
var marsman=new ET('Mr.Q','男');
alert(marsman instanceof ET);//true
alert(marsman instanceof Person);//false mrasman是ET对象的实例,而不是Person对象的实例

      总结:在这篇文章中我们简单介绍了创建一个对象的三种方式:Object,字面量和构造函数,而当创建很多类似对象时,工厂模式是个不错的选择,但因为批量标准化的生产,产品缺乏个性,所以我们要用构造函数,来区分不同的对象。可是当我们通过构造函数来区分不同的对象时,依然避免不了产生重复代码的问题,就像上面的Person和ET它们除了构造函数名称不一样,其他都一样,那么这又该如何解决呢?我想,原型和继承的使用是少不了的,将在后续文章中介绍。

你可能感兴趣的:(JavaScript,创建对象)