日期:2014-05-16  浏览次数:20492 次

关于js的call方法问题
//用函数定义类
function Person(name,age){
//this表示公开变量,外部可以直接通过实例化访问
this.name=name;
this.age=age;
//var表示私有变量,外部可以通过公开方法访问
var a=1;
var f=2;
this.b=function(){
return a;
}
return a+f;
}
//原型对象也有构造函数
alert(typeof Person);
Person.prototype.c=function(){
return this.age;
}

//实例化
var p=new Person("张三",18);
alert(Person.call(p));//这里如果把call放在这,下面的p.name弹出的是undefined,如果把这句放在最后则不会出现问题,求解?
alert(p.name);
alert(p.a);
alert(p.b());
alert(p.c());

------解决方案--------------------
Person.call(p,'张三','18');
你调查一下call方法的用法就知道了
------解决方案--------------------
修改成

//实例化
 var p=new Person("张三",18);
 alert(Person.call(p,'name',20));//这里如果把call放在这,下面的p.name弹出的是undefined,如果把这句放在最后则不会出现问题,求解?
 alert(p.name);
 alert(p.a);
 alert(p.b());
 alert(p.c()); 

就可以看到效果了
你的这种情形类似下面的语句
p.pfunc = Person;
p.pfunc();
相当于给对象p调用了空参数的person函数