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