日期:2014-05-16  浏览次数:20463 次

下面是创建javascript对象的三种方法,有何不同?从内存分配的角度说明。
下面有三个函数,均可创建小汽车对象,有什么不同呢?望大侠们多从内存分配的角度去解释。    
 

/************************************************************************
函数一*/
function     Car(){    
 
      var     a     =     new     Object;    
 
      a.name=null;    
 
      a.weight     =     null;    
 
      a.showCar=     function     (){     alert( "NAME[ "+a.name+ "]     WEIGHT[ "+a.weight+ "] "};    
 
  return     a;    
 
}    
 
 
 
  /************************************************************************
函数二*/

function     Car(name,weight){    
 
          this.name     =     name;    
 
          this.weight     =     weight;    
 
          this.showCar=     function     (){     alert( "NAME[ "+this.name+ "]     WEIGHT[ "+this.weight+ "] "}    
 
}    
 
 
 
  /************************************************************************
函数三*/

 
function     Car(name,weight){    
 
          this.name     =     name;    
 
          this.weight     =     weight;    
 
          }    
Car.prototype.showCar=     function     (){     alert( "NAME[ "+this.name+ "]     WEIGHT[ "+this.weight+ "] "}    


有何不同?

------解决方案--------------------
推荐使用第3种,原因在于那个方法成员~~~~~
------解决方案--------------------
第一个是一个函数。。
执行后返回一个对象。

第二个是一个函数。。
实例化后可成为对象。

第一个和第二个无区别。。

第三个只是把showCar给了prototype这个特殊的对对象(传说中的原型)

它们的函数存放的不通。。(它们是指把1-2看做a,3看做b)

第一个和第二个的showCar方法为一个独立的函数。。。
其this指针指向相对应的对象。。。

如果创建两个a



var o1 = new Car(1, 1); //第一个函数

var o2 = new Car(1, 1); //第一个函数


这样

o1.showCar --------------- 函数1

o2.showCar --------------- 函数2

而创建两个b



var o1 = new Car(1, 1) //第三个函数

var o2 = new Car(1, 1) //第三个函数

o1.showCar ---------------
|
--------- prototype.showCar 函数
|
o2.showCar ---------------
------解决方案--------------------
这里,给你个很结实的demo

<script type= "text/javascript ">
var wc = new Function();
wc.prototype.a = function () { return "a "; }

var o1 = new wc;

var o2 = new wc;
alert(o1.a === o2.a && o2.a === wc.prototype.a);


var cs = function () {