首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

下面是创建javascript对象的三种方法,有何不同?从内存分配的角度说明。该怎么处理

2012-02-22 
下面是创建javascript对象的三种方法,有何不同?从内存分配的角度说明。下面有三个函数,均可创建小汽车对象,

下面是创建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 () {


this.a = function () { return "a "; };
};

var o2 = new cs;
var o3 = new cs;

alert(o2.a === o3.a);
</script>
[解决办法]
都返回function () { return "a "; }这函数 可以解释一下吗?上面你那我没看明白
[解决办法]
就是说,它们的值虽然一样。但是它们的引用地址却不同。。。
这样的话。。。
a创建一次则创建一个func

b创建多少个都是引用的那一个func

所以说b比较节省资源。。。

但是一个对象也不会创建那么多次吧。。。
所以说都无所谓啦。。自己感觉怎么写方便就怎么写好了。。。

热点排行