关于call和apply:
实际上是改变了函数的作用域,也可以用来实现继承。
var name = "xiaoming";
var a = function () {
alert(this.name);
};
var b = {
name: "xiaohua"
};
a.call(b)
这里可以看到,方法a在b上面运行了。
var name = "xiaoming";
function say() {
this.sayName = function(){
alert(this.name);
}
}
function Student(name){
this.name = name;
say.apply(this);
}
var xiaoming = new Student("xiaoming");
xiaoming.sayName();
在构造函数Student里面,我们用apply继承了say,所以用构造函数构造出来的对象都会有sayName方法。
apply和call只是传入参数不一样而已。apply传入的第二个参数是一个数组,这一点可以有很多妙用。
比如:
Array.prototype.push.apply(arr1,arr2);
可以实现将arr2直接加到arr1后面。
Array.prototype.splice(arr1,[index,0].concat(arr2));
实现了将arr2插入arr1的index位置。
Math.max.apply(null,arr);