87,910
社区成员
发帖
与我相关
我的任务
分享
var car = function() {
this.ipertrol = 100;
this.cloneNum = 0;
};
car.prototype.run = function() {
if(this.ipertrol != 0) {
this.ipertrol--;
}
};
car.prototype.clone = function() {
var srcCar = this;
srcCar.cloneNum++;
var cloneObj = function(srcObj) {
if(typeof(srcObj) != 'object') return srcObj;
if(srcObj == null) return srcObj;
var myNewObj = new Object();
for(var i in srcObj)
myNewObj[i] = cloneObj(srcObj[i]);
return myNewObj;
}
var newCar = cloneObj(srcCar);
newCar.cloneNum = 0;
return newCar;
}
克隆这个主要考引用吧。如果单纯用return new Car(this.pertol);肯定会在这个类增加引用类型的成员变量的时候出现错误。所有它的实例都会共享这个引用类型的成员变量。function Car(pertrol){
this.pertrol=pertrol;
arguments.callee.prototype.clonenum++;
}
Car.prototype={
construtor:Car,
run:function(){
this.pertrol--;
},
cloneCount:function(){
return this.clonenum;
},
clonenum:0
}
Car.clone=function(target,obj){
$.extend(true,target,obj);
target.clonenum=0;
return target;
}
var $c1 = new Car(100);
var $c2 = new Car(200);
var $num = $c1.cloneCount();
var supCar = {
gao:'lihaideche'
}
Car.clone(supCar,$c1);
var $s = supCar;
var $c3 = new Car(300);