您现在的位置是:首页 > 电脑技术查询 > web开发

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

编辑:chaxungu时间:2022-10-02 23:19:13分类:web开发

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