JavaScript中常见的几种创建对象的方式:基于对象扩充属性和方法、基于工厂方式创建对象、基于构造函数和基于原型

 
<script>
 //创建对象的方式1:基于对象的扩充其属性和方法。
 var s=new Object();
 s.name="zhangsan";
 s.age=20;
 s.say=function(){
  alert(this.name+": "+this.age);
 }
 s.say();


 //创建方式2:基于工厂方式创建(带参数的),最常用的。相当于构造函数
/* function createObject(name,age){
  var s1=new Object();
  s1.name=name; //要是不带参数可以写成s1.name="zhangsan"
  s1.age=age;   //要是不带参数的工厂方式,则可写成s1.age=20;
  s1.say=function(){
   alert(this.name+": "+this.age);
  }
  return s1;
  }
  */


 //下面这个函数对象为多个对象所共享(函数对象的定义写在构造函数外),而不是每个对象拥有一个函数对象(函数对象写在工厂方法内)
//这种方法是比上面的创建方法要好的。定义对象和定义对象方法时,二者分开定义。
 function say(){
   alert(this.name+": "+this.age);//谁调用这个方法,this指代谁。
  }
 function createObject(name,age){
  var s1=new Object();
  s1.name=name; //要是不带参数可以写成s1.name="zhangsan"
  s1.age=age;   //要是不带参数的工厂方式,则可写成s1.age=20;
  s1.say=say;//调用多个对象共享的方法函数。
  return s1;
 }
 
 var ob1=createObject("lisi",28);
 ob1.say();
 var ob2=createObject("zhaoliu",30);
 ob2.say();

 //创建方式3:构造函数式。
 function person(name,age){
  //在执行第一行语句前,js引擎会自动为我们创建一个对象
  this.name=name; //要是不带参数可以写成s1.name="zhangsan"
  this.age=age;   //要是不带参数的工厂方式,则可写成s1.age=20;
  //this.say=say;//调用多个对象共享的方法函数。
  this.say=function(){
   alert(this.name+": "+this.age);
  }
  //构造函数内隐藏有一个return返回语句,用语将刚才创建的对象返回
 }
  var p1=new person("zhangsan",29);//注意和工厂方式的不一致。
  p1.say();

  //创建方式4:原型方式prototype.
  //无法再构造函数中为对象属性赋值。只能生成后再赋值。
  //使用原型方式创建的所有对象,会共享原型中的属性,一个对象对属性的改变,会影响到其他对象的该属性。
  function animal(){
  }

  // animal.prototype.name="lisi";
  animal.prototype.name=new Array();
  animal.prototype.age=20;
  animal.prototype.say=function(){
   alert("我是animal对象。"+this.name+": "+this.age);
 }
 var a=new animal();
 a.name.push("animal1");
 a.name.push("animal2");
 a.age=10;
 a.say();
 var a2=new animal(); //则a2的name属性和a的一样。
 a2.say();

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值