实例一,call和apply用法
function Person(name,age){
this.name =name;
this.age=age;}
var o = new Object();
alert(o.name,o.age);//undefined_undefined
Person.call(o,"dexter",23);
alert(o.name,o.age);//dexter_23
Person.apply(o,["dexter1",23])//apply方法作用同call,不同之处在于参数传递的形式是用数组传递
alert(o.name+"_"+o.age);//dexter1_23
实例二
function Circle(radius){
this.radius = radius;
this.area=function(){return 3.14*this.radius*this.radius;};
}
假定我们定义了100个Circle类的实例对象,那么每个实例都有一个radius和area方法,实际上,除了radius属性,每个Circle类的实例area方法都是一样,这样我们可以把area方法抽出来定义在Circle的prototype属性中。
function Circle(radius){
this.radius=radius;
}
Circle.prototype.area=function(){return 3.14*this.radius*this.radius;}
实例三使用prototype属性模拟继承
function Circle(radius)
{
this.radius=radius;
}
Circle.prototype.area=function(){return 3.14*this.radius*this.radius;}
function PositionCircle(x,y,radius){
this.x=x;
this.y=y;
Circle.call(this,radius);//调用父类的方法,相当于调用this.Circle(radius)
}
PositionCirlce.prototype=new Circle();//设置PositionCircle的父类为Circle
var pc=new PositionCircle(1,2,1);
alert(pc.area());
PositionCircle.prototype.constructor=PositionCircle;//设置子类的constructor,否则它会指向父类
2.作用域、闭包、模拟私有属性