读书人

下面是创建javascript对象的三种方法

发布时间: 2012-02-22 19:36:56 作者: rapoo

下面是创建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比较节省资源。。。

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

读书人网 >JavaScript

热点推荐