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

小弟我可以理解为这是JavaScript的Bug吗

编辑:chaxungu时间:2022-10-10 23:24:05分类:web开发

我可以理解为这是JavaScript的Bug吗
见代码


$(ducument).ready(function(){
varf1=$("#formFujia4");
varf2=$("#formZhuangshi4");

varmc1=newMyClass(f1);
varmc2=newMyClass(f2);

varjsono={
a:mc1,
b:mc2
};

alert(jsono.a.getForm().attr("action"));
alert(jsono.b.getForm().attr("action"));
})

functionMyClass(f){
varform=f;

MyClass.prototype.getForm=function(){
returnform;
}
}

formFujia4和formZhuangshi4是两个form对象action不一样

但是打印的结果确是一样后面的对象会覆盖前面的对象


------解决方案--------------------
没写对,写法太奇葩,这个如果要解释挺困难;
简单说一下,原型上的成员可以被其实例访问,并且是共享的,所以你这种写法每个实例获得的值必然是同一个,因为其调用的都是同一个函数,闭包中的form变量也必定是一致的。
解释不明白就算了,这样改就行:

functionMyClass(f){
this.form=f;

MyClass.prototype.getForm=function(){
this.form;
}
}
或者
functionMyClass(f){
this.form=f;
}
MyClass.prototype.getForm=function(){
this.form;
}
都可以避免该问题