关于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);
本文详细介绍了JavaScript中call和apply函数的区别与应用。通过实例展示了如何利用这两个方法改变函数的作用域,实现对象间的继承,并提供了实用技巧如数组操作和求最大值等。
143

被折叠的 条评论
为什么被折叠?



