关于call和apply。
function a(names){
this.name=names;
}
a.prototype.show=function(){
alert(this.name);
}
function b(name1){
this.name=name1;
}
b.prototype=new a();
bb=new b("jack");
bb.show();
new a("Mark").show();
new a().show.call(b("Jack"));
a.prototype.show.call(b("jack"));//call有两个参数,继承对象a的方法; alert(jack)
alert(bb instanceof a?true:false);
a.prototype=new a();把对象a的实例直接赋给对象b的原型链上面,然后b的实例可以调用a的方法了。 下面看个人解释:
var aa=new a("Jack");
aa.show()//jack aa=b.prototype;
第二个弹出一个Mark 对象a实例之后得自调用.
第三个弹出Jack 用了call方法继承a的show方法。
第四个也是jack 我们最喜欢用call的习惯方法.
instanceof //解释一下 就是bb是不是对象a的实例 是就返回true 不是就返回false
上面换成apply也会可以的,只不过第二个参数apply是用数组。两个apply常用的例:
var arr=[5,4,6,5,4];
var arr2=[87,45.4,77];
Array.prototype.push.apply(arr,arr2);//返回arr=[5,4,6,5,4,87,45.4,77];
Math.max.push.apply(null,arr2);//返回87;